CASE表达式语法错误SQL

时间:2011-05-27 17:18:16

标签: sql sql-server sql-server-2005 syntax

我到处研究过但似乎无法解决一个简单的错误: 运行Microsoft SQL Server:

UPDATE copyprogmaster
       SET active =
                 CASE
                   WHEN active = 1 THEN active = 0
                   WHEN active = 0 THEN active = 1
                  ELSE active
                 END
WHERE source = 'Mass_Mail'

我的错误是:

  

第4行:'='附近的语法不正确。

3 个答案:

答案 0 :(得分:10)

删除=之后的THEN,以便:

  UPDATE copyprogmaster
       SET active =
                 CASE
                   WHEN active = 1 THEN 0
                   WHEN active = 0 THEN 1
                  ELSE active
                 END
  WHERE source = 'Mass_Mail'

在第二行active =之后您已经有SET

答案 1 :(得分:4)

在那之后你不需要重复“active =”

UPDATE copyprogmaster
       SET active =
                 CASE
                   WHEN active = 1 THEN 0
                   WHEN active = 0 THEN 1
                  ELSE active
                 END
WHERE source = 'Mass_Mail'

以下是http://msdn.microsoft.com/en-us/library/ms181765.aspx

文档中的示例
USE AdventureWorks2008R2;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

答案 2 :(得分:1)

根据您的查询,我认为active字段为bitint(假设int字段仅包含值 0 1 ,或 NULL )。在这种情况下,我相信您可以按如下方式编写查询:

UPDATE  dbo.copyprogmaster
SET     active = active ^ 1
WHERE   source = 'Mass_Mail'

请注意,该查询可以处理NULL值,还可以处理 1 ,# 4 和# 6 行截图不变。屏幕截图# 1 显示表格结构,屏幕截图# 2 显示上述查询的示例执行。

希望有所帮助。

屏幕截图#1:

Table

屏幕截图#2:

Output