2011-08-18 8 views

Respuesta

37

Utilice un T-SQL IF:

IF @ABC IS NOT NULL AND @ABC != -1 
    UPDATE [TABLE_NAME] SET [email protected] 

Tome un vistazo a la MSDN docs.

+7

Eso fácil ¿eh? Bueno, voy a clavar un tenedor en una toma de corriente y anotar una aguja sucia de un callejón en Atlantic City y otras cosas igualmente tontas. Gracias por tu ayuda. – Jake

+1

@Jake, sin preocupaciones. Todos tenemos nuestros días. Por cierto, bienvenido a StackOverflow! –

25

Otro enfoque cuando se tienen muchos cambios serían usar COALESCE:

UPDATE [DATABASE].[dbo].[TABLE_NAME] 
SET  
    [ABC] = COALESCE(@ABC, [ABC]), 
    [ABCD] = COALESCE(@ABCD, [ABCD]) 
+5

Esto es lo que estaba golpeando mi cabeza en el escritorio tratando de hacer. Mucho mejor aspecto que un montón de parejas "if-update" cuando hay una docena de columnas involucradas. – Herb

+0

¡Simplemente genial! Muchas gracias. –

0

Otro enfoque es ISNULL().

UPDATE [DATABASE].[dbo].[TABLE_NAME] 
SET  
    [ABC] = ISNULL(@ABC, [ABC]), 
    [ABCD] = ISNULL(@ABCD, [ABCD]) 

La diferencia entre ISNULL y COALESCE es el tipo de devolución. COALESCE también puede tomar más de 2 argumentos y usar el primero que no sea nulo. Es decir.

select COALESCE(null, null, 1, 'two') --returns 1 
select COALESCE(null, null, null, 'two') --returns 'two' 
Cuestiones relacionadas