在sql server中用一个条件更新多个列

Posted

技术标签:

【中文标题】在sql server中用一个条件更新多个列【英文标题】:update multiple columns with one condition in sql server 【发布时间】:2021-04-26 10:49:54 【问题描述】:

我有一个包含一些列的表,我需要在 SQL Server 中根据条件更新它。 我有一张桌子,我想在一些 UI 操作后在这张桌子上执行“更新”语句。 但问题是我必须根据条件只更新某些列,而某些列将在没有任何条件的情况下更新。

请检查下面的架构详细信息

Table_1

ID Name Email Phone
1 A a@g.com 12345678890
2 B b@g.com 14345678890

我有一个过程,我们正在发送用于更新此表的参数,并且我们还发送一个标志参数(用于在更新语句中应用条件)

CREATE PROC UpdateStudent                    
 @Name VARCHAR(100) = NULL,                    
 @Email VARCHAR(100) = NULL,                 
 @Phone VARCHAR(20) = NULL,                   
 @IsChanged BIT = NULL 
AS                   
BEGIN                         
           
      --update 'Table_1'
      update Table_1 SET 
                 Name = IIF(@IsChanged = 1, @Name, null),
                 Email = @Email,
                 Phone = IIF(@IsChanged = 1, @Phone , null)
      where ID = 1
END 

因此,如果标志 @IsChanged 为 1,则根据上述查询我需要更新,但如果标志 @IsChanged 为 0,则我必须更新不同的“更新”语句-

  IF @IsChanged = 0
  BEGIN
              --update 'Table_1'
                update Table_1 SET 
                    Name = NULL,
                    Email = NULL,
                    Phone = NULL
               where ID = 1

  END 
  

有没有最好的方法来处理这个要求,如果我们必须用一个条件更新多个列,我们如何在 SQL Server 中做到这一点?

【问题讨论】:

您当前的更新查询有什么问题? @TimBiegeleisen,没有错,但问题是如果我的表中有 10 列,那么我必须为每列使用此条件 10 次。所以,我正在寻找一种方法,我们可以使用一个 case 语句或一个条件来更新它。 您可以将IIF 替换为CASE 表达式,但它实际上会给您更多代码,而不是更少。 @TimBiegeleisen,它会解决我的问题吗?如果是,请添加一些代码。 不 - 这里没有“问题”需要解决。您只是想避免编写重复的代码。要求别人免费为你做这件事似乎有点冒昧。而且我认为您当前的设计和逻辑毫无意义。如果什么都没有改变(IsChanged = 0),那么为什么要调用这个过程呢?像这样的过程的默认值 null 对 IMO 毫无意义,但确实鼓励开发人员懒惰。 【参考方案1】:

为了让事情更清楚,你可以有 IF else 逻辑。

IF @IsChanged = 1 
BEGIN 
update Table_1 SET 
                 Name = @Name
                 Email = @Email,
                 Phone = @Phone
      where ID = 1
END
ELSE
BEGIN
update Table_1 SET 
                 Name = null
                 Email = @Email,
                 Phone =  null
      where ID = 1
END

【讨论】:

以上是关于在sql server中用一个条件更新多个列的主要内容,如果未能解决你的问题,请参考以下文章

将 Excel 导入 SQL Server

如果存在并满足多个条件,如何更新行,否则如何在 SQL Server 中插入

sql server链接查询

使用 R 更新 SQL Server 中表的多个列

SQL Server 删除触发器以更新同一表中的多个列

具有多个或条件的sql server外连接