2013-05-28 105 views
1

我對微軟的T-sql非常陌生(用於Oracle PL/SQL),我用一個非常簡單的過程遇到了一個煩人的問題。Microsoft sql存儲過程不能正確執行select語句

我創建了以下過程

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

這真的是導致問題的代碼?我希望你能從你發佈的代碼中得到類似'Product not found:5'的消息,而不是'Product not found。'。 ProductId = 5' – nurdglaw

+0

確實給出'Product not found:5',馬虎的複製和粘貼工作;} – ErikL

+0

OK。這個問題可能在你發佈的代碼中。不知道它是什麼;我會一直盯着它! – nurdglaw

回答

5

你的查詢語法稍有不當,更改查詢閱讀:

IF (@productId IS NOT NULL) 

而是採用!=

這意味着你的SELECT聲明從來沒有被稱爲因此產品爲何總是失蹤。

+0

有趣。雖然我看了它,但我沒有發現這一點。 SQL比較運算符是可怕的錯誤設計。 – usr

+0

我知道它必須是簡單的東西,謝謝! – ErikL

+0

奇怪的是,沒有關於'!='構造的錯誤嗎?或者它有一些(其他)在mssql中的含義? – ErikL

相關問題