2011-01-26 16 views
13

He estado usando un SQL como esta para actualizar una lista de propiedades en mi base de datos:SQL UPDATE, pero sólo si el valor anterior es nulo

update my_table set a = ?, b = ?, c = ?, d = ?, where customer = ? 

Pero Quiero actualizar una propiedad con un valor nuevo SOLAMENTE si ya no tiene un valor en la base de datos. ¿Cómo puedo hacer eso?

+1

¿Cuál es su RDBMS? –

+0

Estoy usando Oracle. –

Respuesta

3

Si está utilizando Oracle:

update my_table 
    set a = nvl(a, new_a_value), 
     b = nvl(b, new_b_value), 
     c = nvl(c, new_c_value), 
     d = nvl(d, new_d_value), 
where customer = ? 

Si no está utilizando Oracle, por favor, actualice pregunta con RDBMS que está utilizando, o buscar un nvl como función en su base de datos.

1
update YourTable 
    set a = coalesce(a, NewValueA), 
     b = coalesce(b, NewValueB), 
     ... 
    where customer = ? 
2

Si usted está hablando de hacer que en un Considerado cada campo en la fila:

update my_table 
set a = coalesce(a, ?), 
    b = coalesce(b, ?), 
    c = coalesce(c, ?) 
where customer = ? 
18

En MS SQL algo como esto (no el valor asumiendo que significa la base de datos NULL) debería funcionar:

update 
    my_table 
set 
    a = COALESCE(a, ?), 
    b = COALESCE(b, ?), 
    c = COALESCE(c, ?), 
    d = COALESCE(d, ?) 
where 
    customer = ? 

COALESCE() devuelve el primer valor no nulo de sus argumentos.

+1

@marc_s - COALESCE es ANSI SQL y debe ser compatible con todos los sistemas RDBMS. ISNULL es una función específica de RDBMS. Dado que OP nunca menciona qué plataforma están usando, creo que COALESCE es la respuesta correcta. –

1

utilizar combinaciones de "es nulo" o "no es nulo" en las consultas, es decir

actualización mi_tabla conjunto A =? donde cliente =? y a es nulo

Por supuesto, esto solo funciona para columnas donde null es un valor legal. En realidad, es difícil saber exactamente qué consulta funcionará para usted sin conocer las restricciones en las distintas columnas.

1

En MySQL, se puede hacer:

UPDATE my_table 
SET 
a = IFNULL(a, ?), 
b = IFNULL(b, ?), 
c = IFNULL(c, ?), 
d = IFNULL(d, ?) 
where customer = ? 
0

probar este código SQL nativa es un trabajo para mí muy bien:

UPDATE table 
SET field = 'NO' 
WHERE field 
IS NULL 
OR field = '' 

actualización solo NULL valor o vacía.

Cuestiones relacionadas