Sql server 在T-SQL UPDATE语句中实现IF条件
使用T-SQL,我希望执行一个UPDATE语句,该语句仅在定义了相应的变量时才设置列 下面是一个简单的伪tsql示例,说明了我试图实现的目标: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中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