【问题标题】:SQL Server Multiple Assignments within IF or CASE WHEN blockIF 或 CASE WHEN 块内的 SQL Server 多重分配
【发布时间】:2015-12-16 20:12:38
【问题描述】:

我想知道是否可以为 SQL Server 2008 中的 IF 或 CASE WHEN 语句块内的多个字段分配值?在我正在从事的项目中,当满足条件时,我想将特定值分配给 4 个不同的字段,如果不满足,我想将其他值分配给相同的字段。 请参阅下面的示例。 在此先感谢您的帮助。欢迎任何提示。

SELECT With CASE WHEN

SELECT with IF

SELECT  Field1
        ,Field2
        ,Field3
        CASE 
        WHEN Condtion1_Met THEN
           ,Field4 = Value4A
           ,Field5 = Value5A
           ,Field6 = Value6A
           ,Field7 = Value7A
       ELSE
           ,Field4 = Value4B
           ,Field5 = Value5B
           ,Field6 = Value6B
           ,Field7 = Value7B
       END
FROM Table1
______________________________________________

SELECT  Field1
       ,Field2
       ,Field3
       IF Condtion1_Met
          BEGIN 
             ,Field4 = Value4A
             ,Field5 = Value5A
             ,Field6 = Value6A
             ,Field7 = Value7A
          END
       ELSE
          BEGIN
             ,Field4 = Value4B
             ,Field5 = Value5B
             ,Field6 = Value6B
             ,Field7 = Value7B
          END

FROM Table1

【问题讨论】:

    标签: sql sql-server if-statement select case-when


    【解决方案1】:

    不,这是不可能的。 CASE 表达式(它被认为是表达式,而不是语句)只能返回单个值。不能设置多个值。

    而且IF 语句根本不能在查询中使用。相反,您可以这样做:

    IF Condition1_Met
     SELECT ...
    ELSE
     SELECT ...
    

    【讨论】:

    • 如果我用IF也是一样吗?
    • 我应该指定的,它在存储过程中。我以前使用过 IF,它有效,但不适用于多个分配。
    • 在存储过程中没关系。您可以使用IF 来控制流程,但不能在 SELECT 查询或任何其他查询中使用它。现在,如果您有SQL Server 2012 或更高版本,并且您实际上是在谈论IIF(),那么该表达式具有与CASE 完全相同的限制。
    【解决方案2】:

    我最终决定使用 WHILE 循环结合 IF/ELSE 语句来更新表中的字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2011-08-27
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多