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

时间:2010-07-15 06:15:33

标签: sql-server tsql conditional

使用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语句根据条件动态设置字段/列? - 如果是的话,怎么样?

2 个答案:

答案 0 :(得分:44)

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

答案 1 :(得分: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
你喜欢它吗? 享受。