在 SQL Server 中的 case 语句中寻找解决方案

Posted

技术标签:

【中文标题】在 SQL Server 中的 case 语句中寻找解决方案【英文标题】:Looking for solution in case statement in SQL Server 【发布时间】:2013-04-17 22:27:51 【问题描述】:

我正在尝试在 case 语句中编写以下语句。尝试为特定列更新不同 TableB 中的值。

做完之后

Update a 
set DISMMR = 

然后尝试在 case 语句中检查以下条件

'H01' Is not NULL 
  and
('H02','H03','HR04','S07','S08','S09') Is NULL
 Then 'Unknown'

这里的值来自表名:TableA,列名是Code

此特定列设计为NOT NULL

在这里我说Is NULL 意味着我想说的是,('H02','H03','HR04','S07','S08','S09') 这个特定值在TableA 中不存在或不存在。

当我在 TableA 中为列 Code 说这个特定值 H01 时 ---- Is not NULL -- 表示列 Code 的这个特定值存在/存在于来自 TableA 的列中。

我需要在 case 语句中执行此操作,因为一旦检查完此条件,我将编写以 WHEN 开头的其他 case 语句来检查另一个条件并使用不同的值进行更新

我正在使用 SQL Server 2008 R2。现在我写了下面的查询。它在 SSMS 中运行良好,但是当我在 SSIS 包中使用此存储过程时。我的包裹因错误而失败。

[执行 SQL 任务] 错误:执行查询“执行 [dbo].[usp_GetMRF_CHP] ?,?,?”失败并出现以下错误:“当子查询未使用 EXISTS 引入时,选择列表中只能指定一个表达式。”。可能失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确

CASE WHEN EXISTS(SELECT 1 FROM dbo.TableA WHERE Code = 'H01')
  AND NOT EXISTS(SELECT 1 FROM dbo.TableA 
                 WHERE Code IN ('H02','H03','HR04','S07','S08','S09')
                )
 THEN 'Unknown'
when ---- I have another case here. 

任何帮助将不胜感激。在此先感谢

【问题讨论】:

【参考方案1】:

如果我理解你是正确的,你想知道是否存在 Code = 'H01' 的记录,而没有其他代码的记录。对此的 case 语句如下所示:

CASE WHEN EXISTS(SELECT 1 FROM dbo.TableA WHERE Code = 'H01')
      AND NOT EXISTS(SELECT 1 FROM dbo.TableA 
                     WHERE Code IN ('H02','H03','HR04','S07','S08','S09')
                    )
     THEN 'Unknown'
END

【讨论】:

以上是关于在 SQL Server 中的 case 语句中寻找解决方案的主要内容,如果未能解决你的问题,请参考以下文章

where 子句中的 case 语句 - SQL Server

SQL Server 中的 CASE 语句不支持 OR

SQL Server 2008 - SELECT 子句中的 Case / If 语句 [重复]

我想使用 CASE 语句来更新 sql server 2005 中的一些记录

如何在sql server中使用if语句和case

sql server 2008 r2:当前会计年度 where 子句中的 case 语句