1

我对 Microsoft 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

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

4

1 回答 1

5

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

IF (@productId IS NOT NULL)

而不是使用!=

这意味着您的SELECT声明从未被调用,因此为什么该产品总是丢失。

于 2013-05-28T14:20:25.317 回答