SQL Server 2005 mise en œuvre de MySQL REMPLACER DANS?
MySQL a cette incroyablement utile encore properitary REPLACE INTO
Commande SQL.
Peut facilement être imité dans SQL Server 2005?
Le démarrage d'une nouvelle Opération, en faisant un Select()
puis UPDATE
ou INSERT
et COMMIT
est toujours un peu d'une douleur, surtout quand le faire dans l'application et, par conséquent, en gardant toujours 2 versions de la déclaration.
Je me demande si il ya un moyen facile et universelle façon de mettre en œuvre une telle fonction dans SQL Server 2005?
Vous devez vous connecter pour publier un commentaire.
C'est quelque chose qui me dérange à propos de MSSQL (coup de gueule sur mon blog). Je souhaite MSSQL pris en charge
upsert
.@Dillie-O code est un bon moyen dans les anciennes versions SQL (+1 voix), mais il s'agit essentiellement de deux opérations d'e /s (la
exists
et puis leupdate
ouinsert
)Il y a un peu de mieux sur ce post, en gros:
Cela réduit-il à une opérations d'e /s si c'est une mise à jour, ou deux si un insert.
MS Sql2008 introduit
merge
de SQL:2003 standard:Maintenant, il est vraiment juste une opération e /s, mais c'est affreux code 🙁
MERGE
ne prend pas en charge laWHERE
clause, vous devez réécrire que l'utilisation deUSING
etON
. Aussi, sauf si vous ajoutezWITH (HOLDLOCK)
, il y a une course et simultanéesINSERT
s pourrait se produire, avec l'un d'entre eux à défaut en raison de l'affrontement.La fonctionnalité que vous recherchez est traditionnellement appelé un UPSERT. Au moins savoir de quoi il s'appelle peut vous aider à trouver ce que vous cherchez.
Je ne pense pas que SQL Server 2005 est une grande manière de le faire. 2008 introduit la FUSION de déclaration qui peut être utilisé pour y parvenir en: http://www.databasejournal.com/features/mssql/article.php/3739131 ou http://blogs.conchango.com/davidportas/archive/2007/11/14/SQL-Server-2008-MERGE.aspx
De fusion a été disponible dans la version bêta de 2005, mais ils l'ont enlevé dans la version finale.
Ce que le upsert/fusion est en train de faire est quelque chose à l'effet de...
J'espère donc que la combinaison de ces articles et cette pseudo-code peut faire évoluer les choses.
J'ai écrit un blog à propos de ce problème.
La ligne de fond est que si vous voulez pas cher les mises à jour ... et vous voulez être en sécurité pour l'utilisation simultanée. essayez:
Cette façon, vous avez 1 de l'opération pour les mises à jour et un maximum de 3 opérations pour les insertions. donc, si vous êtes généralement la mise à jour c'est sûr option la moins coûteuse.
Je serais également très attention à ne pas utiliser tout ce qui est dangereux pour l'utilisation simultanée. Son vraiment facile pour obtenir des violations de clé primaire ou de dupliquer des lignes de production.