Реализация условия IF внутри оператора T-SQL UPDATE - PullRequest
19 голосов
/ 15 июля 2010

Используя 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, для достижения того же результата, что и в приведенном выше псевдокоде, я должен был бы создать инструкцию UPDATE для каждого условия IF - это то, что я Я пытаюсь избежать необходимости.

Можно ли динамически УСТАНОВИТЬ поля / столбцы на основе условия, используя только один оператор UPDATE? - Если так, то как?

Ответы [ 2 ]

45 голосов
/ 15 июля 2010

Выражение 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 голосов
/ 30 ноября 2013

Думаю, это будет полезно:

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

Тебе нравится? Наслаждайтесь.

...