【问题标题】:SQL UPDATE using an IF statement使用 IF 语句的 SQL UPDATE
【发布时间】:2016-06-12 21:40:45
【问题描述】:

我有一个具有唯一标识符“名称”的表和两个都是布尔语句的字段。这两个字段的标题分别为“sentbirth”和“senthire”。

我正在尝试做的是查看该值对于 senthire 或 sentbirth 是否已经为真。如果是这样,我想保持真实。但如果它是 false,那么我希望它使用从我的 Web 应用程序生成的 @SentBirth 或 @SentHire 值进行更新。

到目前为止我所拥有的是:

SELECT [name],[sentbirth],[senthire]
FROM [CCRAuction].[dbo].[cardsUser]
WHERE name = @Name

IF [sentbirth] = '1'
    BEGIN
    UPDATE [CCRAuction].[dbo].[cardsUser]
        SET [sentbirth] = '1'
    END 
 ELSE
    BEGIN
     UPDATE [CCRAuction].[dbo].[cardsUser]
        SET [sentbirth] = @SentBirth
    END

IF [senthire] = '1'
    BEGIN
    UPDATE [CCRAuction].[dbo].[cardsUser]
        SET [senthire] = '1'
    END
 ELSE
    BEGIN
     UPDATE [CCRAuction].[dbo].[cardsUser]
        SET [senthire] = @SentHire
    END

使用此代码,我收到错误消息,指出“sentbirth”和“senthire”是无效的列名。

如何在 Microsoft SQL Server Management Studio 中正确编写此代码?

这个问题的答案是:

UPDATE cu SET
  [sentbirth] = CASE WHEN cu.[sentbirth] = '1' THEN cu.[sentbirth] ELSE @SentBirth END,
  [senthire] = CASE WHEN cu.[senthire] = '1' THEN cu.[senthire] ELSE @SentHire END
FROM [CCRAuction].[dbo].[cardsUser] cu
WHERE cu.name = @name

【问题讨论】:

标签: sql sql-server if-statement select sql-update


【解决方案1】:

检查并保留旧的或更新为新的,其他字段相同:

UPDATE cu SET
  [sentbirth] = CASE WHEN cu.[sentbirth] = '1' THEN cu.[sentbirth] ELSE @sentbirth END,
  ...
FROM [CCRAuction].[dbo].[cardsUser] cu
WHERE cu.name = @name

【讨论】:

  • 我将您的代码尝试为:UPDATE cu SET [sentbirth] = CASE WHEN cu.[sentbirth] = '1' THEN cu.[sentbirth] ELSE @SentBirth END, [senthire] = CASE WHEN cu.[senthire] = '1' THEN cu.[senthire] ELSE @SentHire END, FROM [CCRAuction].[dbo].[cardsUser] cu WHERE cu.name = @name 但我收到错误“关键字'FROM'附近的语法不正确
  • @Dominick,删除FROM之前的最后一个逗号
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 2023-02-01
  • 2015-09-20
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2015-05-09
  • 2018-10-06
相关资源
最近更新 更多