2010-07-15 3 views
17

Mit T-SQL möchte ich eine UPDATE-Anweisung ausführen, die nur dann SET-Spalten definiert, wenn die entsprechenden Variablen definiert sind.IF-Bedingung in einer T-SQL-UPDATE-Anweisung implementieren

Hier ist ein einfaches pseudo-Tsql Beispiel dafür, was ich versuche zu erreichen:


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

Von dem, was ich durch das Lese wie IF-Bedingungen arbeiten in T-SQL sagen kann, in Um dasselbe Ergebnis wie der obige Pseudocode zu erreichen, müsste ich für jede IF-Bedingung eine UPDATE-Anweisung erstellen - was ich zu vermeiden versuche.

Ist es möglich, Felder/Spalten basierend auf einer Bedingung mit nur einer UPDATE-Anweisung dynamisch zu setzen? - Wenn das so ist, wie?

Antwort

42

Die 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

Ich denke, das nützlich sein wird:

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 

Gefällt es dir? Genießen.

Verwandte Themen