2010-07-15 13 views
17

Utilizando T-SQL, me gustaría ejecutar una instrucción UPDATE que establecerá columnas solo si se definen las variables correspondientes.Implementación de la condición IF dentro de una instrucción ACTUALIZACIÓN T-SQL

Aquí está un ejemplo simple pseudo-tsql de lo que estoy tratando de lograr:


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

De lo que puedo decir al leer cómo, si las condiciones de trabajo de T-SQL, en Para lograr el mismo resultado que el pseudo código anterior, tendría que crear una instrucción UPDATE para cada condición IF, que es lo que estoy tratando de evitar tener que hacer.

¿Es posible establecer dinámicamente campos/columnas basados ​​en una condición utilizando solo una instrucción UPDATE? - ¿Si es así, cómo?

Respuesta

42

El 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

Creo que esto será útil:

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 

qué te gusta? Disfruta.

Cuestiones relacionadas