是否有写以下内容的较短方法?
-- select empty_result
select t.col
from (select 1 as col) t
where 1 = 0 -- never match
“原始”问题如下。可能有时对此进行了修改,以期希望由于显示特定用例而停止Y响应;并且[理所当然地]声称是混乱的混乱。
用例是一个TSQL查询,在某些情况下返回空结果集,而在另一情况下返回“真实”结果集。在两种情况下,结构都应该相同。
if @foo = 'bar'
-- select real_result
else
-- select empty_result
然后,这里的问题是,[[特定地关于仅创建一个空结果集/派生表。
一种执行此操作的方法如下。是否有语法上“简单”
方法?-- select empty_result
select t.col
from (select 1 as col) t
where 1 = 0 -- never match
按照以下SQL构造。它(XY)在问题范围之外,即使它在这里起作用,因为所产生的模式与上面的示例相同。尽管它可能是不错的选择,但它需要不同的TSQL流控制结构。如果两种情况都导致使用不同的模式,则它也不会返回正确的结果集-使其在标题范围方面过于具体。
此特定MINIMALIF..ELSE..
用例的替代品,它[[可以
-- XY alternative specific to MINIMAL CASE shown above
-- select real_result or empty_result with single query
select t.col
from real_data t
where @foo = 'bar'
虽然不是专门针对较短的空结果集语法,但Ken White提供了一种在两种情况下相同的情况下避免重复架构的方法。根据原始问题,IF流量控制结构为preserved
。if @foo = 'bar' -- select real_result select t.col from real_table t else -- select empty_result select t.col from real_table t where 1 = 0