我刚才碰到了意想不到的事情,它提醒我,我还有很多关于SQL的知识。
我有一个报告查询,它使用UNION ALL
来连接不同日期范围的结果,并将它们以HTML格式存储在临时表中。该查询今天给出了MTD范围的NULL值,因为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'
不返回任何结果,因此即使在WHERE
子句中没有匹配值,似乎作用于非文字的UDF也会导致SQL返回一行。这是一个奇怪的边缘情况,或者这是否因为今天早上逃脱我的某些原因而完全有意义?