sql - 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*/
解决方案
正如@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 结果 - 但这取决于您。
推荐阅读
- php - MySql datetime:在 DateTime::DATE_ATOM 中抛出日期错误
- jsf - 如何制作primefaces的响应对话框
- excel - VBA-一次复制多个图表
- javascript - 从 ui 选择选项中删除对象
- angular - 以角度上传文件时出现错误“不支持的内容类型:应用程序/vnd.ms-excel”
- c# - 将不同的项目添加到 DataGridView 中每一行的 DataGridViewComboBoxColumn
- android - Android DiffUtil.ItemCallback areContentsTheSame 不同的ID
- reactjs - React keydown 事件捕获和冒泡
- java - Android Things onTouch 没有发布 GPIO
- compiler-construction - yacc 和 lex 中令牌的字符串值