我正在编写被旧系统调用的存储过程。旧系统的限制之一是必须至少返回一个结果集中的行。通常情况下,在第一列返回0(是的,我知道这很奇怪!)。
实现这一点的明显方法是创建一个临时表,将结果放入其中,检查临时表中是否存在任何行并返回来自临时表或单个空结果的结果。
另一种方法可能是在主查询执行之前对相同的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
;WITH cte AS (...) ... SELECT * FROM cte UNION ALL SELECT 0, '' WHERE NOT EXISTS (SELECT TOP 1 * FROM cte)
- Outside the Box Developer