return 来自 SQL 服务器的空结果集的简洁语法
Terse syntax to return an empty result set from SQL server
有没有更短的写法?
-- select empty_result
select t.col
from (select 1 as col) t
where 1 = 0 -- never match
接下来是 "original" 问题。这被修改了很多次,明确希望由于显示特定的 use-case 而停止 Y 响应;并且[正确地]声称是一团混乱。
use-case 是一个 TSQL 查询,在某些情况下 return 是空结果集,而在另一种情况下是 'real' 结果集。在这两种情况下,结构应该是相同的。
if @foo = 'bar'
-- select real_result
else
-- select empty_result
这里的问题是,特别是关于简单地创建空结果集/派生table。
一种方法如下。有句法'simpler'方法吗?
-- select empty_result
select t.col
from (select 1 as col) t
where 1 = 0 -- never match
在这个特定的最小 IF..ELSE..
CASE 中的替代方案,它 可以 构造如下 SQL。它在问题范围之外 (XY),即使它在这里起作用,因为结果模式与上面的示例相同。虽然在其他地方可能是个不错的选择,但它需要不同的 TSQLflow-control 结构。如果两种情况都导致不同的架构,它也不会 return 正确的结果集 - 使其在标题范围方面过于具体。
-- 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'
是的,'simpler'/更短/更简洁的语法可以在 SQL 服务器中返回空结果集,不需要先创建派生 table。
-- select empty_result
select top 0
1 as col
这是 SQL 服务器特定的语法。在其他数据库实现中可能还有其他类似的形式。
虽然没有专门针对较短的空结果集语法,但 Ken White 提供了一种方法,如果模式在两种情况下都相同,则可以避免重复模式。根据原始问题,IF 流量控制结构 保留 。
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
有没有更短的写法?
-- select empty_result
select t.col
from (select 1 as col) t
where 1 = 0 -- never match
接下来是 "original" 问题。这被修改了很多次,明确希望由于显示特定的 use-case 而停止 Y 响应;并且[正确地]声称是一团混乱。
use-case 是一个 TSQL 查询,在某些情况下 return 是空结果集,而在另一种情况下是 'real' 结果集。在这两种情况下,结构应该是相同的。
if @foo = 'bar'
-- select real_result
else
-- select empty_result
这里的问题是,特别是关于简单地创建空结果集/派生table。
一种方法如下。有句法'simpler'方法吗?
-- select empty_result
select t.col
from (select 1 as col) t
where 1 = 0 -- never match
在这个特定的最小 IF..ELSE..
CASE 中的替代方案,它 可以 构造如下 SQL。它在问题范围之外 (XY),即使它在这里起作用,因为结果模式与上面的示例相同。虽然在其他地方可能是个不错的选择,但它需要不同的 TSQLflow-control 结构。如果两种情况都导致不同的架构,它也不会 return 正确的结果集 - 使其在标题范围方面过于具体。
-- 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'
是的,'simpler'/更短/更简洁的语法可以在 SQL 服务器中返回空结果集,不需要先创建派生 table。
-- select empty_result
select top 0
1 as col
这是 SQL 服务器特定的语法。在其他数据库实现中可能还有其他类似的形式。
虽然没有专门针对较短的空结果集语法,但 Ken White 提供了一种方法,如果模式在两种情况下都相同,则可以避免重复模式。根据原始问题,IF 流量控制结构 保留 。
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