web-dev-qa-db-fra.com

Requête SQL pour la mise à jour de la base de données si la valeur n'est pas null?

Je vais avoir une table qui a environ 17 champs. Je dois effectuer des mises à jour fréquentes dans ce tableau. Mais le problème est chaque fois que je ne mets peut-être à jour que quelques champs . Quel est le meilleur moyen d'écrire une requête pour la mise à jour dans un tel scénario? Je recherche une option dans laquelle la valeur n'est mise à jour que si elle n'est pas nulle.

Par exemple, j'ai quatre champs dans la base de données Say A, B, C, D . L'utilisateur met à jour la valeur de say D. Toutes les autres valeurs restent les mêmes. Je souhaite donc une requête de mise à jour qui ne mette à jour que la valeur de D en conservant les autres inchangés . SO si je mets a, b et c comme null et d avec la valeur fournie par l'utilisateur je veux écrire une requête de mise à jour qui ne met à jour que la valeur de d comme a, b et c est null . c'est quelque chose de réalisable? 

J'utilise la base de données SQLite.

Quelqu'un pourrait-il s'il vous plaît jeter un peu de lumière à l'intérieur?

26
Zach

Sans connaître votre base de données, il est difficile d'être spécifique. Dans SQL Server, la syntaxe ressemblerait à quelque chose comme ...

UPDATE MyTable 
SET 
        Field1 = IsNull(@Field1, Field1),
        Field2 = IsNull(@Field2, Field2),
        Field3 = IsNull(@Field3, Field3)
WHERE 
     <your criteria here>

MODIFIER

Depuis que vous avez spécifié SQLLite ... remplacez ma fonction IsNull par COALESCE() ou regardez la fonction IfNull.

54
EBarr
 UPDATE your_table
    SET some_column = 42
 WHERE some_column IS NOT NULL

Ne mettra à jour some_column que si ce n'est pas null

6

Publier une solution SQL Server avec 2 tables pour la postérité. Query joint deux tables et met à jour les valeurs présentes. Sinon, la valeur d'origine est conservée.

tables = table1, table2 ayant chacune champ1 et champ2

update t1 WITH (ROWLOCK)
set T1.Field2 = ISNULL(T2.Field2,T1.Field2)
from Table1 T1 Join Table2 T2 
    ON T1.Field1 = T2.Field1
0