以下查询在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)
Run Code Online (Sandbox Code Playgroud)
在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)
Run Code Online (Sandbox Code Playgroud)
真实表格会出现同样的问题:在某些情况下,查询不会返回任何结果,如果您进行一些细微的更改,例如删除空格或回车符,它会再次起作用...
我认为查询中可能存在问题,因为括号中的SELECT可能会被解释为表达式而不是子查询,如本页所示.但这应该至少会返回一个错误.
我错过了什么吗?
编辑26/06/2010:我运行了一些分析会话,结果如下.
对于上面的查询,事件序列是:
对于没有括号的查询:
对于工作查询:
我还使用真正的表运行其中一个查询,这导致了我同样的问题.事件的顺序是:
没有早期的"例外"=>表存在.没有"SQL:StmtCompleted"=>这意味着发生了错误,我看不出为什么不会引发此事件的任何其他原因.否"Showplan All"=>表示错误发生在计算执行计划之前(或之后).它可能是由cte和括号组合引起的.
我将在下周提出微软支持的问题.