Проблема синтаксиса SQL (множественный выбор) - PullRequest
0 голосов
/ 18 июня 2010

У меня проблемы с получением точных значений данных с помощью моего хранимого запроса proc ниже:

    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 (в последнем операторе выбора внизу) возвращает значение NULL, когда он должен возвращать действительные строковые данные.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 18 июня 2010
IF NOT(@ErrorCode = NULL) - ALWAYS false(NULL)!

Это должно быть

IF (@ErrorCode IS NOT NULL)
1 голос
/ 18 июня 2010

Почему бы вам сначала не запросить эту строку и дважды проверить, действительно ли ErrorDesc содержит значение:

SELECT ErrorDesc WHERE RecID=@RecID

Что это возвращает?Если 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: IF NOT(@ErrorCode = NULL) и посмотрите на мое IF (@ErrorCode IS NOT NULL). Вы хотите использовать НЕ, ИЛИ ЕСТЬ, а не = при работе с NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...