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

时间:2013-05-28 14:17:30

标签: sql-server sql-server-2008 tsql

我是微软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

当我以这种方式运行时:

exec ele_test 5

我明白了:

Msg 50000, Level 16, State 1, Procedure ele_test, Line 20
Product not found. Productid : 5

然而,当我只运行这样的查询时:

SELECT * FROM d_afterpay.dbo.Product
        WHERE ProductId = 5

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

1 个答案:

答案 0 :(得分:5)

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

IF (@productId IS NOT NULL)

而不是使用!=

这意味着您的SELECT语句从未被调用,因此产品始终缺失。