UPDATE¶
Met à jour les lignes spécifiées dans la table cible avec de nouvelles valeurs.
Syntaxe¶
Paramètres requis¶
target_tableSpécifie la table à mettre à jour.
col_nameSpécifie le nom d’une colonne dans
target_table. Ne pas inclure le nom de la table. Par exemple,UPDATE t1 SET t1.col = 1n’est pas valide.valueSpécifie la nouvelle valeur à définir dans
col_name.
Paramètres facultatifs¶
FROM additional_tablesSpécifie une ou plusieurs tables à utiliser pour sélectionner les lignes à mettre à jour ou pour définir de nouvelles valeurs. Notez que la répétition de la table cible entraîne une jointure réflexive.
WHERE conditionExpression qui spécifie les lignes de la table cible à mettre à jour.
Par défaut : aucune valeur (toutes les lignes de la table cible sont mises à jour)
Notes sur l’utilisation¶
Lorsqu’une clause FROM contient un JOIN entre des tables (par exemple,
t1ett2), une ligne cible danst1peut être jointe (c’est-à-dire correspondre) à plus d’une ligne de la tablet2. Dans ce cas, la ligne cible est appelée une ligne multi-jointe. Lors de la mise à jour d’une ligne multi-jointe, le paramètre de session ERROR_ON_NONDETERMINISTIC_UPDATE contrôle le résultat de la mise à jour :Si
FALSE(valeur par défaut), aucune erreur n’est retournée et l’une des lignes jointes est utilisée pour mettre à jour la ligne cible ; cependant, la ligne jointe sélectionnée est non déterministe.IF
TRUE, une erreur est retournée, y compris un exemple des valeurs d’une ligne cible qui joint plusieurs lignes.
Pour régler le paramètre :
Exemples¶
Effectuer une mise à jour standard à l’aide de deux tables :
Mettre à jour les tables avec une jointure qui produit des résultats non déterministes :
Avec ERROR_ON_NONDETERMINISTIC_UPDATE = FALSE, l’instruction met à jour aléatoirement la ligne unique dans
targeten utilisant des valeurs d’une des lignes suivantes danssrc:
(0, 11),(0, 12),(0,13)Avec ERROR_ON_NONDETERMINISTIC_UPDATE = TRUE, une erreur est renvoyée signalant une ligne DML dupliquée
[0, 10].
Pour éviter ce comportement et cette erreur non déterministes, utilisez une jointure 1 pour 1 :
Cette instruction aboutit à la ligne unique dans
targetmise à jour dans(0, 11)(valeurs de la ligne avec la valeur minimale pourvdanssrc) et ne donnera jamais lieu à une erreur.