sql - 查找记录的值并将其从存储过程中返回
问题描述
我创建了一个存储过程,它接受表中唯一项的值并在该表中搜索它。如果存在,则返回该行的主键列的值。如果它不存在,那么现在只返回 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。
我在这里做错了什么?
解决方案
几件事。
你的 if 检查是错误的。根据您的 proc 定义,您正在检查
@ExID
而不是@ExIDPK
并且不能为空@ExID
我建议您也将
exist
逻辑更改为更简单的where
子句
见下面的代码
CREATE PROCEDURE dbo.MyTestSP
@ExID VARCHAR(64)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ExIDPK INT;
SELECT @ExIDPK = ExPK
FROM
dbo.EXIDs
WHERE ExID = @ExID;
RETURN ISNULL(@ExIDPK,1234);
END;
推荐阅读
- c# - 如何将此字符串转换为日期时间
- javascript - 编译 Vue NativeScript 项目时,命令 gradlew.bat 失败,退出代码为 1
- python - BST算法的实现
- php - 将数组传递给 Twig 中的宏
- swift - 快速使用 GCD 的竞争条件
- php - 如何修改此 PHP 函数以接收 Wordpress 帖子的日期?
- javascript - 一个输入字段值不应大于表的其他字段值
- java - 在进行 HTTP 调用之前使用 RestTemplate 清除 Cookie
- r - 删除未连接的节点 R igraph 或 ggnet
- smalltalk - 如何创建在 Pharo 中存储名称的方法?