2010-04-20 14 views
12

Tengo una pregunta SQL que puede ser básica para algunos pero me confunde.SQL: ¿Cómo puedo actualizar un valor en una columna solo si ese valor es nulo?

Aquí es un ejemplo de nombres de columna para una tabla de 'persona': PersonalID, Nombre, Apellido, coches, TINTE DE PELO, FavDrink, FavFood

Digamos que la entrada E de la fila:

121312, Rayna, Pieterson, BMW123d, Brown, NULL, NULL

Ahora quiero actualizar los valores para esta persona, pero sólo si el nuevo valor no es nulo, actualización:

121312, Rayna, Pieterson, NULL, Rubio, Fanta, NULL

La nueva fila tiene que ser:

121312, Rayna, Pieterson, BMW123d, Rubio, Fanta, NULL

así que estaba pensando algo en la línea de:

Persona de actualización (PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood) establece Car = @Car (donde @Car no es nulo), HairColour = @HairColour (donde @HairColour ...) ... etc

Mi única preocupación es que no puedo agrupar todas las condiciones al final de la consulta porque requerirá que todos los valores tengan la misma condición. ¿No puedo hacer algo como actualización TINTE DE PELO si no es nulo @HairColour

+0

Wow: 5 minutos de silencio, luego 4 personas que responden lo mismo en al mismo tiempo. :-) – Heinzi

+0

Jaja, sé que es genial, ¿no? –

Respuesta

24

Id uso se unen para esto: http://msdn.microsoft.com/en-us/library/ms190349.aspx

update Person 
set Car = coalesce(@Car, Car), HairColour = coalesce(@HairColour, HairColour) 
+1

Referencia de MySQL: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html# function_coalesce – dnagirl

+0

Muchas gracias por su ayuda. Estaba pensando en usar esta función pero no pude entender cómo funcionó exactamente. Cheers trabaja un sueño –

13

El siguiente debería funcionar:

UPDATE Person 
    SET Car = ISNULL(@Car, Car), 
     HairColour = ISNULL(@HairColour, HairColour), 
     ... 

Se utiliza la función de SQL Server ISNULL, que devuelve

  • el primer valor si no es nulo,
  • o, de lo contrario, el segundo valor (que, en este caso, es el valor actual de la fila).
+0

Esto también funciona tan bien como usar coalesce. Gracias por tu ayuda.Lamento haber aceptado la otra respuesta ya que fueron los primeros en responder. –

2

Establezca la columna igual a sí misma con un isnull alrededor de su parámetro.

UPDATE 
    YourTable 
SET 
    YourColumn = ISNULL(YourColumn, @yourParameter) 
WHERE 
    ID = @id 
+0

Esa no era la pregunta. Cita: "actualice los valores para esta persona, pero solo si el valor * nuevo * no es nulo" – Heinzi

4

Usted puede utilizar la función isnull:

update Person 
set 
    Car = isnull(@Car, Car), 
    HairColour = isnull(@HairColour, HairColour), 
    FavDrink = isnull(@FavDrink, FavDrink), 
    FavFood = isnull(@FavFood, FavFood) 
where PersonalID = @PersonalID 
Cuestiones relacionadas