2010-07-15 4 views
17

En utilisant T-SQL, je voudrais exécuter une instruction UPDATE qui ne définira les colonnes que si les variables correspondantes sont définies.Implémentation de la condition IF dans une instruction UPDATE T-SQL

Voici un exemple simple pseudo-tsql de ce que je suis en train 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 travail dans T-SQL, en 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 - ce que j'essaie d'é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?

Répondre

42

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

Je pense que ce 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 

Est-ce que vous aimez? Profitez-en.

Questions connexes