以下查询在SQL Server 2008(SP1测试通过)中没有返回结果也没有错误,您可以针对任何数据库运行它,甚至是master:
WITH computed_table (id) AS
(
SELECT id FROM this_table_does_not_exist
)
(SELECT * FROM computed_table)
UNION
(SELECT * FROM another_table_that_does_not_exists)
在 SQL Server 2005 上,因为表不存在而出现错误。 如果删除一些括号,也会出现错误:
WITH computed_table (id) AS
(
SELECT id FROM this_table_does_not_exist
)
SELECT * FROM computed_table
UNION
(SELECT * FROM another_table_that_does_not_exists)
同样的问题也会出现在真实的表中:有时候查询不返回任何结果,如果你做一些微小的更改,比如删除一个空格或回车,它就能再次工作了...
我认为可能存在查询问题,因为括号中的SELECT可能被解释为表达式而不是子查询,就像这个页面所示。但至少应该返回一个错误。
我有什么遗漏吗? 编辑 26/06/2010:我运行了一些分析会话,以下是结果。
对于上面的查询,事件序列如下:
- 异常(错误:208,无效的对象名称)
- SQL:BatchStarting
- SQL:StmtStarting
- SQL:BatchCompleted
- 异常(错误:208)
- SQL:BatchStarting
- SQL:StmtStarting
- 异常(错误:208)
- 用户错误消息(无效的对象名称'this_table_does_not_exist')
- SQL:BatchCompleted
- SQL:BatchStarting
- SQL:StmtStarting
- Showplan All
- SQL:StmtCompleted
- SQL:BatchCompleted
- SQL:BatchStarting
- SQL:StmtStarting
- SQL:BatchCompleted
我将在下周向Microsoft支持提出问题。