Sto usando SQL Server 2008, e vorrei essere in grado di approfittare di qualcosa come ON DUPLICATE KEY UPDATE
clausola di MySQL per INSERT
dichiarazionipossibile simulare la funzionalità di MySQL su DUPLICATE KEY UPDATE con SQL Server
codice legacy Current fa una cancellazione e la successiva inserto che esegue in problemi di concorrenza con inserti chiave duplicate da thread separati:
Qui è l'errore che vedo nel mio ambiente di produzione:
Violation of PRIMARY KEY constraint 'PK_Audience'. Cannot insert duplicate key in object 'dbo.Audience'.
(sp_ContentUpdate)
Chiave primaria:
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
Wrapping questo TSQL in una transazione sembra rimuovere il problema di concorrenza o di mascherare il problema modificando i tempi. Tuttavia, non penso che il wrapping in una transazione abbia effettivamente risolto la concorrenza.
Forse mi sto sbagliando. I tuoi suggerimenti sono apprezzati.
possibile duplicato del [non SQL Server offrono nulla di simile ON DUPLICATE KEY UPDATE di MySQL] (http: // StackOverflow .com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update) –