【发布时间】:2019-06-04 15:58:53
【问题描述】:
我创建了一个存储过程,它接受表中唯一项的值并在该表中搜索它。如果存在,则返回该行的主键列的值。如果它不存在,则暂时返回 1234 以进行测试。
我就是这么写的:
CREATE PROCEDURE dbo.MyTestSP
@ExID VARCHAR(64)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ExIDPK INT;
SELECT @ExIDPK = ExPK
FROM
dbo.EXIDs
WHERE
EXISTS(SELECT 1 FROM dbo.EXIDs WHERE ExID = @ExID);
IF @ExID IS NOT NULL
BEGIN
RETURN @ExIDPK;
END;
ELSE
BEGIN
RETURN 1234;
END;
END;
这是为了测试我如何称呼它:
EXEC MyTestSP 'ewedweweewe';
但它总是返回这个:
程序试图返回 NULL 状态,这是不允许的。将返回状态 0。
我在这里做错了什么?
【问题讨论】:
-
为什么在
WHERE子句中使用EXISTS()?为什么不直接选择 PK 或使用 OUTPUT 参数? -
我的意思是,您正在使用:
IF @ExID IS NOT NULL,并且您知道它不为空,因为您正在给它一个值。并不意味着您给它的值在 dbo.ExIDs 表上匹配...所以 @ExIDPK 可能为空 -
另外,你在
END;中有一个分号,这是错误的,你根本不需要IF,只需简单化并将变量的默认值设置为 1234。
标签: sql sql-server tsql