web-dev-qa-db-fra.com

Implémentation d'une condition IF dans une instruction T-SQL UPDATE

En utilisant T-SQL, je voudrais exécuter une instruction UPDATE qui FIXERA les colonnes uniquement si les variables correspondantes sont définies.

Voici un exemple pseudo-tsql simple de ce que j'essaie d'accomplir:


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

D'après ce que je peux dire en lisant comment les conditions IF fonctionnent dans T-SQL, afin d'obtenir le même résultat que le pseudo-code ci-dessus, je devrais créer une instruction UPDATE pour chaque condition IF - c'est ce que j'essaie de faire éviter d'avoir à faire.

Est-il possible de définir dynamiquement des champs/colonnes en fonction d'une condition en utilisant une seule instruction UPDATE? - Si c'est le cas, comment?

19
Jed

expression 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
   ...
45
gbn

Je pense que cela sera utile:

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

Aimes-tu? Prendre plaisir.

2
Ahmad Ebrahimi