J'utilise SQL Server 2008, et souhaite être en mesure de tirer profit de quelque chose comme clause ON DUPLICATE KEY UPDATE
de mySQL pour INSERT
déclarationspossible de simuler la fonctionnalité mySQL ON DUPLICATE KEY UPDATE avec SQL Server
code existant actuel ne une suppression et insertion ultérieure qui est en cours d'exécution dans les problèmes de concurrence avec double inserts clés de fils séparés:
Voici l'erreur que je vois dans mon environnement de production:
Violation of PRIMARY KEY constraint 'PK_Audience'. Cannot insert duplicate key in object 'dbo.Audience'.
(sp_ContentUpdate)
clé primaire:
AudienceId, VersionId
Offending SQL:
DELETE FROM dbo.Audience
WHERE VersionId = @VersionId
IF @AudienceXml IS NOT NULL
BEGIN
INSERT INTO dbo.Audience (
VersionId,
AudienceId,
CreatedDate,
CreatedByPersonId,
)
SELECT @VersionId,
AudienceId,
GETUTCDATE(),
@PersonId
FROM dbo.Audience
JOIN @AudienceXml.nodes('/Audiences/Audience') node(c)
ON Audience.AudienceName = c.value('@Name', 'nvarchar(50)')
END
Emballage ce TSQL dans une transaction semble soit supprimer la question de la concurrence ou de masquer le problème en changeant les timings. Cependant, je ne pense pas que l'encapsulation dans une transaction ait réellement résolu la concurrence.
Peut-être que j'y vais mal. Vos suggestions sont appréciées.
double possible (http [Tout comme Duplicate KEY UPDATE MySQL offre ne SQL Server]: // stackoverflow .com/questions/1197733/ne-sql-serveur-offre-rien-comme-mysqls-sur-duplicate-clé-mise à jour) –