SQL SERVER 从 If Exists 中选择多个字段

Posted

技术标签:

【中文标题】SQL SERVER 从 If Exists 中选择多个字段【英文标题】:SQL SERVER Select multiple fields from If Exists 【发布时间】:2017-06-28 18:04:15 【问题描述】:

我必须做一个SQL Server Statement,它必须在为空时返回一个空行,否则返回数据。

我正在尝试从(如果存在)进行选择,但在父表上出现错误。

我简化它。但意思是,条件为空时检索几个字段,不为空时检索其他字段。

当我不在另一个选择中关闭它时它工作正常....我需要将它作为一个表检索以与其他 clouse 进行内部联接。

我该如何解决?

这是我的代码..

select * from
	(
       if exists(select isnull(SECTOR_ID_DESTINO_BAD,-1) 
			from workflow_Compras_detalle w
			where w.id=2)
			begin		
			    select null as Sector,null as sector_id_origen
			end
			else
			begin
				select top 1 isnull(ws.sector,'') sector,  wd.sector_id_origen
				from workflow_Compras_detalle wd 
				where orden <	10
		     end 
	)Table

【问题讨论】:

左外连接不就是这样吗? 【参考方案1】:

您应该尝试将数据插入到临时表或表变量中,然后从该表中获取数据,这是一个带有表变量的示例,如果您需要更持久的东西,您可以使用#Temp 表,我推荐你看看这个:difference between var table and #Temp Table

    DECLARE @VAR_TABLE AS TABLE(
Sector varchar(25),
sector_id_origen int
)

if exists(select isnull(SECTOR_ID_DESTINO_BAD,-1) 
            from workflow_Compras_detalle w
            where w.id=2)
    begin       
                INSERT INTO @VAR_TABLE
                Select null as Sector,null as sector_id_origen 
    End
Else
    begin

        INSERT INTO @VAR_TABLE
        select top 1 isnull(ws.sector,'') sector,  wd.sector_id_origen
        from workflow_Compras_detalle wd 
        where orden <   10
End 

SELECT * FROM @VAR_TABLE

【讨论】:

在comparison 中添加 CTE、表变量和临时表会很有趣

以上是关于SQL SERVER 从 If Exists 中选择多个字段的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server-一次删除具有IF EXISTS的多列

SQL Server - 如何创建 IF EXISTS...SELECT AND SELECT

SQL Server 2008 仅从字段中选择日期 [重复]

Sql server 2005 :- IF EXISTS 和 COUNT(*) > 0 的 IO 统计信息是不是相同?

SQL Server查询表值参数的短路EXISTS语句

SQL Server 2005 - WHERE NOT EXISTS 和 NOT EXISTS 内的复杂脚本