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

Sql server 在T-SQL UPDATE语句中实现IF条件,sql-server,tsql,conditional,Sql Server,Tsql,Conditional,使用T-SQL,我希望执行一个UPDATE语句,该语句仅在定义了相应的变量时才设置列 下面是一个简单的伪tsql示例,说明了我试图实现的目标: 通过阅读T-SQL中IF条件的工作原理,我可以看出,为了获得与上述伪代码相同的结果,我必须为每个IF条件创建一个UPDATE语句——这正是我试图避免的 是否可以仅使用一条UPDATE语句根据条件动态设置字段/列如果是,怎么做? 我认为这将是有用的: Create PROCEDURE [dbo].[CodeUpdate] ( @Id int,

使用T-SQL,我希望执行一个UPDATE语句,该语句仅在定义了相应的变量时才设置列

下面是一个简单的伪tsql示例,说明了我试图实现的目标:



通过阅读T-SQL中IF条件的工作原理,我可以看出,为了获得与上述伪代码相同的结果,我必须为每个IF条件创建一个UPDATE语句——这正是我试图避免的

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


我认为这将是有用的:

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
你喜欢吗? 享受

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
   ...
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