首页 > 解决方案 > SQL 没有在我的过程中引发错误

问题描述

如果数据库中存在员工的 ID 号,我正在尝试执行此过程来验证员工并显示错误消息。我用有效数字检查它显示员工但是当我做不存在的员工时,我没有收到我应该得到的错误消息。

我试过 if/else 和 try/catch。我不知道我在哪里搞砸了。

DROP PROCEDURE spVerifedEmployeeByID  
GO

CREATE PROCEDURE spVerifedEmployeeByID   
    @EmployeeID  INT = NULL
AS 
    IF @EmployeeID IS NOT NULL
        SELECT CONCAT(FirstName, ' ', MiddleName, ' ', LastName) AS FullName
        FROM Person.Person p
        JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
        WHERE e.BusinessEntityID = @EmployeeID 
    ELSE 
        @EmployeeID != e.BusinessEntityID 

    BEGIN
        PRINT( 'Not a valid Employee ID')
    END

/*BEGIN
BEGIN TRY
    SELECT CONCAT(FirstName,' ',MiddleName,' ',LastName) AS FullName
    FROM Person.Person p
    JOIN HumanResources.Employee e
    ON p.BusinessEntityID=e.BusinessEntityID
    WHERE e.BusinessEntityID = @EmployeeID 
END TRY
BEGIN CATCH
PRINT 'Not a valid Employee ID' 
END CATCH
END*/

标签: sqlsql-servertsql

解决方案


正如@RandomUser 在评论中所说,您只检查员工是否通过,而不是员工是否存在于数据库中。

例如,假设您传递了一个@EmployeeID不存在的。IF 语句检查@EmployeeID IS NOT NULL- 是否不是,因此它转到 SELECT 语句。不幸的是,SELECT 语句不会返回任何内容。

我建议更改 IF 组件以检查@EmployeeID数据库中是否存在,例如,

IF EXISTS (SELECT * 
           FROM Person.Person p
           JOIN HumanResources.Employee e
               ON p.BusinessEntityID=e.BusinessEntityID
           WHERE e.BusinessEntityID = @EmployeeID
           )
    BEGIN

        SELECT CONCAT(FirstName,' ',MiddleName,' ',LastName) AS FullName
        FROM Person.Person p
        JOIN HumanResources.Employee e
            ON p.BusinessEntityID=e.BusinessEntityID
        WHERE e.BusinessEntityID = @EmployeeID 

    END
ELSE   -- @EmployeeID  != e.BusinessEntityID 
    BEGIN 
 
        PRINT( 'Not a valid Employee ID')

    END;

或者,您可以只读一次(假设所有员工的名字、中间名和姓氏都有效)

DECLARE @FullName nvarchar(300);

SELECT @FullName = CONCAT(FirstName,' ',MiddleName,' ',LastName)
    FROM Person.Person p
    JOIN HumanResources.Employee e
        ON p.BusinessEntityID=e.BusinessEntityID
    WHERE e.BusinessEntityID = @EmployeeID;

IF @FullName IS NOT NULL
    BEGIN

        SELECT @FullName AS FullName;

    END
ELSE   -- @EmployeeID  != e.BusinessEntityID 
    BEGIN 
 
        PRINT( 'Not a valid Employee ID')

    END;

注意 - 您可能希望将错误“打印”更改为“选择”,因为用户期待 SELECT 结果 - 但这取决于您。


推荐阅读