J'ai une situation où j'ai un tableau (col1 (pk), col2, col3, col4)
et un ensemble d'enregistrements que je dois insérer dans une table et mettre à jour en cas de duplication de la clé. J'aimerais effectuer une requête par lot pour accélérer les choses. Cependant, col4
n'a pas de NOT NULL
contrainte. Le problème se pose lorsque je veux mettre à jour avec des enregistrements (val1, val2, val3, None), (val4, val5, val6, val7)
. Pour le premier enregistrement, je ne veux pas que la colonne 4 soit mise à jour (Si (val1, val2, val3, val8)
a existé dans DB, je ne voudrais pas remplacer val8 parce que None signifierait l'absence de valeur, contrairement à la définition explicite de Null). Cependant, pour le deuxième enregistrement, je voudrais mettre à jour col4
car une valeur explicite est transmise. Cela conviendrait parfaitement à un enregistrement pour lequel je définirais simplement les colonnes de mise à jour comme suit col2, col3,
et non col4
Mais je veux mettre cette requête en lot et j'ai besoin de disposer des éléments suivants col4
mettre à jour lorsqu'une valeur lui est transmise et ne pas mettre à jour lorsque je n'ai pas de valeur. J'aurais logiquement besoin de quelque chose comme ce qui suit.
INSERT INTO table1
(col1, col2, col3, col4)
VALUES
('val1', 'val2', 'val3'), ON DUP KEY UPDATE col2, col3
('val5', 'val6', 'val7', 'val8'), ON DUP KEY UPDATE col2, col3, col4
('val9', 'val10', 'val11') ON DUP KEY UPDATE col2, col3
Il est clair que cela peut être fait en faisant une série d'instructions séparées, mais j'aimerais trouver un moyen de le faire par lots. Y a-t-il un moyen de faire cela, ou une autre méthode, en SQL ?