2010-07-15 8 views
17

Utilizzando T-SQL, vorrei eseguire un'istruzione UPDATE che imposterà le colonne solo se vengono definite le variabili corrispondenti.Implementazione della condizione IF all'interno di un'istruzione UPDATE T-SQL

Ecco un semplice esempio di pseudo-tsql di quello che sto cercando di realizzare:


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

Da quello che posso dire con la lettura di come, se le condizioni di lavoro in T-SQL, in Per ottenere lo stesso risultato dello pseudo codice precedente, dovrei creare un'istruzione UPDATE per ogni condizione IF, che è quello che sto cercando di evitare di dover fare.

È possibile impostare dinamicamente campi/colonne in base a una condizione utilizzando una sola istruzione UPDATE? - Se é cosi, come?

risposta

42

Il 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

Penso che questo sarà 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 

ti piace? Divertiti.

Problemi correlati