在 T-SQL UPDATE 语句中实现 IF 条件

23

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

这是一个简单的伪T-SQL示例,表达了我想要完成的目标:


--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
据我所知,通过阅读 T-SQL 中 IF 条件的工作原理,为了实现与上述伪代码相同的结果,我必须为每个 IF 条件创建一个 UPDATE 语句——而这正是我想避免的。 是否可能仅使用一个 UPDATE 语句根据条件动态设置字段/列呢? 如果是,怎么做?
2个回答

56

CASE表达式

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

你喜欢它吗?享受吧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,