J'ai un test de table ayant des colonnes id dont la clé primaire et auto incrémenté et le nom. Je veux insérer un nouvel enregistrement si annd seulement s'il n'y a pas d'enregistrements. Par exemple
l'entrée est id = 30122 et nom = john
s'il y a des enregistrements avec l'ID 30122, j'ai mis à jour la colonne de nom en john, s'il n'y a pas d'enregistrements, j'ai inséré un nouvel enregistrement.
Je peux faire en utilisant 2 requêtes comme
select * from test where id=30122
s'il a des enregistrements, je peux utiliser update test set name='john' where id=3012
ou s'il n'a pas d'enregistrements, je peux utiliser
insert into test(name) values('john')
Mais je voulais utiliser une seule requête?
Quelqu'un peut-il dire si c'est possible?
sql-server
merge
upsert
SpringLearner
la source
la source
But I wanted to use single query?
Pourquoi?MERGE
aucune version, même SQL Server 2019. Quelques informations à ce sujet ici .Réponses:
Vous pouvez essayer ceci
Une autre approche pour de meilleures performances est
et aussi lire ces mauvaises habitudes pour lancer le préfixe de schéma
la source
En supposant que SQL Server 2008 ou version ultérieure, vous pouvez utiliser
MERGE
:Table
Question
L'
SERIALIZABLE
astuce est requise pour un fonctionnement correct sous une concurrence élevée .Vous pouvez trouver une comparaison des méthodes courantes de Michael J. Swart ici:
Mythbusting: Solutions de mise à jour / insertion simultanées
la source