我正在编写由遗留系统调用的存储过程.遗留系统的一个约束是从存储过程返回的单个结果集中必须至少有一行.标准是在第一列中返回零(是的,我知道!).
实现此目的的显而易见的方法是创建临时表,将结果放入其中,测试临时表中的任何行,并从临时表或单个空结果返回结果.
另一种方法可能是在执行主查询之前对主查询中的相同where子句执行EXISTS.
这些都不令人满意.任何人都可以想到更好的方法.我正在考虑UNION这样的行(我知道这不起作用):
--create table #test
--(
-- id int identity,
-- category varchar(10)
--)
--go
--insert #test values ('A')
--insert #test values ('B')
--insert #test values ('C')
declare @category varchar(10)
set @category = 'D'
select
id, category
from #test
where category = @category
union
select
0, ''
from #test
where @@rowcount = 0
Run Code Online (Sandbox Code Playgroud)