首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果未找到结果,则在查询结果中添加空行

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

Stack Overflow用户
提问于 2010-07-30 02:13:27
回答 6查看 60.5K关注 0票数 24

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

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

另一种方法可能是在执行主查询之前对主查询中的同一where子句执行EXISTS。

这两个都不是很令人满意。有谁能想出更好的方法。我一直在想像这样的联盟(我知道这是行不通的):

代码语言:javascript
复制
--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
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-09-15 20:28:35

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

代码语言:javascript
复制
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 tie“你可以得到所有的行(所有行都有一个1作为"orderdummy",所以所有的行都是并列),或者如果没有结果,你就得到默认的结果。

票数 17
EN

Stack Overflow用户

发布于 2010-07-30 02:19:31

恐怕只有很少的选择。

无论是COUNT、EXISTS before、EXISTs in UNION、TOP子句等,您总是需要触摸表两次

代码语言:javascript
复制
select
    id, category
from mytable
where category = @category
union all --edit, of course it's quicker
select
    0, ''
where NOT EXISTS (SELECT * FROM mytable where category = @category)

EXISTS解决方案比COUNT更好,因为它会在找到行时停止。COUNT将遍历所有行以对它们进行实际计数

票数 31
EN

Stack Overflow用户

发布于 2011-10-18 06:17:32

您可以使用完整的外部联接。对……有影响的事情

代码语言:javascript
复制
declare @category varchar(10)

set @category = 'D'

select #test.id, ISNULL(#test.category, @category) as category from (
    select
        id, category
    from #test
    where category = @category
)  
FULL OUTER JOIN (Select @category as CategoryHelper ) as EmptyHelper on 1=1   

目前,我自己正在对这个场景进行性能测试,所以不确定这会产生什么样的影响,但它会给出一个填充了Category的空白行。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3365697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档