SQL pour déterminer si une seule donnée est exécutée par clé dans une mise à jour ou une insertion

Page mise à jour :
Date de création de la page :

Dans un processus tel que Mettre à jour s’il y a une clé ou Insérer s’il n’y a pas de clé, une sélection est généralement effectuée en fonction de la clé, et le processus est déterminé en vérifiant s’il existe un cas. SQL Server 2008 ajoute également une instruction « merge » qui vous permet d’effectuer une mise à jour et une insertion (puis une suppression) avec une seule instruction. Cependant, il s’agit d’une comparaison de deux tableaux et ne convient pas à des données uniques.

En fait, il existe un moyen de mettre à jour facilement une ligne en déterminant Mettre à jour et Insérer sans avoir à vérifier le nombre d’enregistrements avec une instruction select.

update [TableName]
set [ColumnName] = @value
--    : 他更新 SQL
where [KeyColumnName] = @value
--    : 他キー比較
if @@ROWCOUNT = 0
insert into [TableName]
(
  [ColumnName]
--  : 他更新 SQL
)
values
(
  @value
--  : 他更新値
)

Le mot clé ici est « @@ROWCOUNT ». Le @@ROWCOUNT peut récupérer le nombre de lignes auxquelles le code SQL précédent a été appliqué. Le code précédent exécute d’abord l’instruction Update et, si elle a été mise à jour, @@ROWCOUNT renvoie 1 ou une version ultérieure, de sorte qu’elle n’exécute pas l’instruction Insert suivante. Inversement, si aucune ligne n’est mise à jour dans l’instruction Update, @@ROWCOUNT renvoie 0, alors exécutez Insert by IF statement judgment.

Étant donné que le code SQL ci-dessus est un modèle, remplacez les noms de colonne et les valeurs à mettre à jour au moment approprié. @value n’est qu’un nom de variable, remplacez-le par la valeur que vous souhaitez mettre à jour.