首页 > 解决方案 > 查找记录的值并将其从存储过程中返回

问题描述

我创建了一个存储过程,它接受表中唯一项的值并在该表中搜索它。如果存在,则返回该行的主键列的值。如果它不存在,那么现在只返回 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。

我在这里做错了什么?

标签: sqlsql-servertsql

解决方案


几件事。

  • 你的 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;

推荐阅读