小编典典

如果未找到结果,则在查询结果中添加空行

sql

我正在写旧系统正在调用的存储过程。遗留系统的限制之一是从存储的proc返回的单个结果集中必须至少有一行。标准是在第一列中返回零(是的,我知道!)。

实现此目的的明显方法是创建一个临时表,将结果放入其中,测试临时表中的任何行,然后从临时表中返回结果或返回单个空结果。

另一种方法可能是在执行主查询之前针对主查询中的相同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

阅读 212

收藏
2021-03-17

共1个答案

小编典典

这是一个老问题,但是我有同样的问题。解决方案非常简单,无需双击:

select top(1) WITH TIES * FROM (
select
id, category, 1 as orderdummy
from #test
where category = @category
union select 0, '', 2) ORDER BY orderdummy

通过“ WITH TIES”,您将获得所有行(所有行都带有1作为“ orderdummy”,因此所有都是平局),或者如果没有结果,则得到默认行。

2021-03-17