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)
我确实得到了正确的结果......知道我做错了什么吗?
您的查询语法略有错误,请将查询更改为:
IF (@productId IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)
而不是使用 !=
这意味着您的SELECT声明从未被调用,因此产品始终缺失.
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |