Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Puis-je utiliser l'instruction MERGE dans SQL Server 2005 ?

MERGE a été introduit dans SQL Server 2008. Si vous souhaitez utiliser cette syntaxe, vous devrez effectuer une mise à niveau.

Sinon, l'approche typique dépendra de l'origine des données source. S'il ne s'agit que d'une ligne et que vous ne savez pas si vous devez mettre à jour ou insérer, vous feriez probablement :

UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END

Si votre source est une table #temp, une variable de table, TVP ou une autre table, vous pouvez faire :

UPDATE dest SET ...
  FROM dbo.destination AS dest
  INNER JOIN dbo.source AS src
  ON dest.key = src.key;

INSERT dbo.destination SELECT ... FROM dbo.source AS src
  WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);

Comme avec MERGE (et comme Michael Swart l'a démontré ici ), vous souhaiterez toujours entourer l'une de ces méthodes avec des transactions, une gestion des erreurs et un niveau d'isolement appropriés pour qu'elle se comporte comme une véritable opération unique. Même un seul MERGE déclaration ne vous protège pas de la concurrence.

J'ai publié quelques d'autres précautions concernant MERGE dans plus de détails ici .