Terse语法从SQL Server返回空结果集

问题描述 投票:-1回答:1

是否有写以下内容的较短方法?

-- 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

此特定MINIMAL IF..ELSE..用例的替代品,它[[可以
按照以下SQL构造。它(XY)在问题范围之外,即使它在这里起作用,因为所产生的模式与上面的示例相同。尽管它可能是不错的选择,但它需要不同的TSQL流控制结构。如果两种情况都导致使用不同的模式,则它也不会返回正确的结果集-使其在标题范围方面过于具体。

-- 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'

是否有写以下内容的较短方法? -选择empty_result从(选择1作为col)t中选择t.col,其中1 = 0-永不匹配“原始”问题如下。可能被修改了...
sql sql-server syntax sql-server-2014 derived-table
1个回答
0
投票
这是SQL Server特定的语法。在其他数据库实现中可能还会找到其他类似的形式。

虽然不是专门针对较短的空结果集语法,但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
© www.soinside.com 2019 - 2024. All rights reserved.