【问题标题】:Implementing IF Condition Within a T-SQL UPDATE Statement在 T-SQL UPDATE 语句中实现 IF 条件
【发布时间】:2011-03-16 05:46:16
【问题描述】:

使用 T-SQL,我想执行一个 UPDATE 语句,只有在定义了相应的变量时才会设置列。

这是我想要完成的一个简单的伪 tsql 示例:


--Declaring vars
@ID int,
@Name nvarchar(20),
@Password nvarchar(10)

--Run the update
UPDATE User
SET
IF LEN(@NAME) > 0
  Name = @Name,
IF LEN(@Password) > 0
  Password = @Password

通过阅读 IF 条件在 T-SQL 中的工作原理,我可以看出,为了实现与上述伪代码相同的结果,我必须为每个 IF 条件创建一个 UPDATE 语句 - 这就是我的我尽量避免这样做。

是否可以仅使用一个 UPDATE 语句根据条件动态设置字段/列? - 如果有,怎么做?

【问题讨论】:

    标签: sql-server tsql conditional


    【解决方案1】:

    CASE expression

    UPDATE User
    SET
        Name = CASE WHEN LEN(@NAME) > 0 THEN @Name ELSE Name END,
        Password = CASE WHEN LEN(@Password) > 0 THEN @Password ELSE Password END
    WHERE
       ...
    

    【讨论】:

      【解决方案2】:

      我认为这会很有用:

      Create PROCEDURE [dbo].[CodeUpdate] 
      (
          @Id int, 
          @Name nVarChar(150)=null, 
          @IsActive bit =null, 
          @IsSystem bit=null
      ) AS 
      BEGIN 
          UPDATE [dbo].[Code] SET 
              [Name] = CASE WHEN @Name is null THEN [Name] ELSE @Name END,
              [IsActive] = CASE WHEN @IsActive is null THEN [IsActive] ELSE @IsActive END,
              [IsSystem] = CASE WHEN @IsSystem is null THEN [IsSystem] ELSE @IsSystem END
          WHERE  ID = @Id
      End
      

      你喜欢吗? 享受吧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 2018-08-05
        相关资源
        最近更新 更多