我是微软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
我确实得到了正确的结果...... 知道我做错了吗?
答案 0 :(得分:5)
您的查询语法略有错误,请将查询更改为:
IF (@productId IS NOT NULL)
而不是使用!=
这意味着您的SELECT
语句从未被调用,因此产品始终缺失。