2010-06-18 47 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)