Я столкнулся с чем-то неожиданным только сейчас, и это напомнило мне, что я все еще многого не знаю о SQL.
У меня есть отчетный запрос, который использует UNION ALL
для объединения результатов для разных диапазонов дати сохраните их в форме HTML во временной таблице.Запрос дал значение NULL для диапазона MTD сегодня, так как 1-го числа не было активности.Чего я не понимаю, так это почему я вообще получил скандал?Играя с запросом, я вижу, что этот фрагмент:
SELECT
70000,
'<tr>' + dbo.FormatAsHTMLRowHead('Month to date') + '</tr>'
FROM
#RawResults
WHERE
Date = '2011-05-01'
... не дает результатов, ноль строк, как и ожидалось.Однако, если я добавлю поле к предложению SELECT:
SELECT
70000,
'<tr>'
+ dbo.FormatAsHTMLRowHead('Month to date')
+ dbo.FormatAsHTMLCell(dbo.FormatInteger(SUM(Leads)), 'R')
+ '</tr>'
FROM
#RawResults
WHERE
Date = '2011-05-01'
Затем я получу одну строку со значением NULL:
Sequence HTML
-------- ----
70000 NULL
Запрос SELECT Field FROM #RawResults WHERE Date = '2011-05-01'
не даст результатов, поэтомукажется, что UDF, действующий на не-литерал, заставляет SQL возвращать строку, даже если в предложении WHERE
нет соответствующего значения.Это какой-то странный крайний случай, или это имеет смысл по какой-то причине, которая ускользает от меня сегодня утром?