2010-06-18 96 views
0

我有檢索與我下面的存儲過程的查詢準確數據值的問題:SQL語法問題(多選擇)

CREATE PROCEDURE usp_InvoiceErrorLog 
    @RecID int 
AS 

DECLARE @ErrorString as varchar(1000), 
     @ErrorCode as int; 

Select @ErrorCode = ErrorCode from tbl_AcctRecv_WebRpt Where RecID = @RecID; 
IF NOT(@ErrorCode = NULL) 
    Begin 
     Select @ErrorString = ErrorDesc from tbl_ErrDesc Where ErrorCode = @ErrorCode 
    End 

Select RecID, VendorNum, VendorName, InvNum, InvTotal, (SELECT CONVERT(VARCHAR(11), InvDate, 106) AS [DD MON YYYY]) As InvDate, 
     TicketRequestor, ErrorCode, @ErrorString as ErrorDesc 
    from tbl_AcctRecv_WebRpt Where RecID = @RecID 

的ErrorDesc列(在底部最後的SELECT語句)返回NULL值,當它應該返回一個有效的字符串數據。

任何想法?

回答

1

你爲什麼不爲行和仔細檢查第一查詢,如果ErrorDesc實際上包含了值:

SELECT ErrorDesc WHERE [email protected] 

那有什麼回報呢?如果是NULL,那麼沒有問題。

CREATE PROCEDURE usp_InvoiceErrorLog 
@RecID int 
AS 

DECLARE @ErrorString as varchar(1000) 
DECLARE @ErrorCode as int 

Select @ErrorCode = (SELECT ErrorCode from tbl_AcctRecv_WebRpt Where RecID = @RecID) 

IF (@ErrorCode IS NOT NULL) 
Begin 
    --its NOT NULL 
    Select @ErrorString = (SELECT ErrorDesc from tbl_ErrDesc Where ErrorCode = @ErrorCode) 
End 
--optional it IS NULL 
ELSE 
    BEGIN 
     SELECT @ErrorString = (SELECT 'It Doesnt Contain Anything!') 
    END 

Select 
    RecID, 
    VendorNum, 
    VendorName, 
    InvNum, 
    InvTotal, 
    (SELECT CONVERT(VARCHAR(11), InvDate, 106) AS [DD MON YYYY]) As InvDate, 
    TicketRequestor, 
    ErrorCode, 
    @ErrorString as ErrorDesc 
FROM 
    tbl_AcctRecv_WebRpt 
Where 
    RecID = @RecID 
END 

這適用於我。看看你的,如果條件:IF NOT(@ErrorCode = NULL),並在我的期待IF (@ErrorCode IS NOT NULL).你想使用不是或者更確切地說,然後=與NULL打交道時

+0

如果錯誤代碼不爲空,ErrorDesc應該總是返回一個值; 你爲什麼要做SELECT ErrorDesc WHERE RecID = @ RecID?你沒有加入ErrorCode – user279521 2010-06-18 15:09:10

+0

@ user279521,在我的第一個例子中,我只是告訴你做一個查詢。請參閱我的其他代碼,它適用於我。 – JonH 2010-06-18 15:12:39

+0

@ user279521 - 將我的代碼複製並粘貼到SSMS中,然後運行查詢,然後在stackoverflow中更改具有一堆userXXXXXXX的別名:)難以管理。 – JonH 2010-06-18 15:13:07

3
IF NOT(@ErrorCode = NULL) - ALWAYS false(NULL)! 

應該

IF (@ErrorCode IS NOT NULL)