Блок T-SQL IF не выполняется, хотя выполняются условия - PullRequest
3 голосов
/ 02 августа 2011

У меня есть следующий оператор SQL, над которым я работаю. Я урезал его до частей, необходимых для иллюстрации проблемы.

DECLARE @mwareId as int = 9647,
@startDate as datetime = '2011-07-20',
@endDate as datetime = '2011-07-20'

IF OBJECT_ID('tempdb..#tmpInvoiceList', 'U') IS NOT NULL DROP TABLE #tmpInvoiceList

-- Get base invoice list for customer
SELECT   invoiceId
        ,invoiceNumber
        ,customerId
        ,customerName
        ,customerCode
        ,createDate
        ,lastModifiedDate
        ,invoiceDate
        ,totalInvoiceAmount
        ,statusId
        ,isPaid
INTO #tmpInvoiceList
FROM    Invoice.Invoice

-- Apply date range if applicable
IF ( @startDate != NULL AND @endDate != NULL )
BEGIN
    DELETE FROM #tmpInvoiceList
    WHERE invoiceDate NOT BETWEEN @startDate AND @endDate
END

SELECT * FROM #tmpInvoiceList

У меня для переменных @startDate и @endDate установлены значения даты. Проблема в том, что блок if, который применяет диапазон дат к временной таблице, не выполняется, хотя ни одна из двух переменных не является нулевой, и я не могу найти причину для этого.

Ответы [ 3 ]

4 голосов
/ 02 августа 2011

Насколько я знаю, TSQL не поддерживает оператор! = Для нулевых проверок. Попробуйте это:

IF ( @startDate IS NOT NULL AND @endDate IS NOT NULL )
0 голосов
/ 02 августа 2011

Вы должны использовать IS NOT NULL вместо != NULL

IF ( @startDate IS NOT NULL AND @endDate IS NOT NULL )
...
0 голосов
/ 02 августа 2011

IS [NOT] NULL - правильный способ сравнить значение с NULL. Все (NULL! = NULL), (1! = NULL), (NULL = NULL) оцениваются как NULL (false)

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