Microsoft sql存储过程未正确执行select语句

Eri*_*ikL 1 t-sql sql-server sql-server-2008

我是微软T-sql(使用到Oracle PL/SQL)的新手,我用一个非常简单的程序遇到了烦人的问题.

我创建了以下过程

CREATE PROCEDURE [dbo].[ele_test] @productId INT
AS
DECLARE @productCode VARCHAR(100);
DECLARE @productDescription VARCHAR(100);
DECLARE @error VARCHAR(100);

--Fetch product 
IF @productId != NULL
BEGIN
    SELECT @productCode = ProductCode
        ,@productDescription = ProductDescription
    FROM d_afterpay.dbo.Product
    WHERE ProductId = @productId
END

IF @@ROWCOUNT = 0
BEGIN
    SET @error = 'Product not found: ' + cast(@productId AS VARCHAR(19))

    RAISERROR (@error,16,1);
END
Run Code Online (Sandbox Code Playgroud)

当我以这种方式运行时:

exec ele_test 5
Run Code Online (Sandbox Code Playgroud)

我明白了:

Msg 50000, Level 16, State 1, Procedure ele_test, Line 20
Product not found. Productid : 5
Run Code Online (Sandbox Code Playgroud)

然而,当我像这样运行查询:

SELECT * FROM d_afterpay.dbo.Product
        WHERE ProductId = 5
Run Code Online (Sandbox Code Playgroud)

我确实得到了正确的结果......知道我做错了什么吗?

CSL*_*CSL 5

您的查询语法略有错误,请将查询更改为:

IF (@productId IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)

而不是使用 !=

这意味着您的SELECT声明从未被调用,因此产品始终缺失.