Estoy utilizando SQL Server 2008, y me gustaría ser capaz de tomar ventaja de algo así como EN DUPLICATE KEY UPDATE
cláusula de MySQL para INSERT
declaracionesposible simular la funcionalidad de MySQL en DUPLICATE KEY UPDATE con SQL Server
código heredado actual hace un borrado, y la posterior inserción que se está ejecutando en problemas de concurrencia con inserciones de clave duplicados de hilos separados:
Aquí está el error que veo en mi entorno de producción:
Violation of PRIMARY KEY constraint 'PK_Audience'. Cannot insert duplicate key in object 'dbo.Audience'.
(sp_ContentUpdate)
Clave principal:
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
envolver este TSQL en una transacción parece bien eliminar el problema de concurrencia o enmascarar el problema cambiando los tiempos. Sin embargo, no creo que el ajuste en una transacción haya resuelto la concurrencia.
Quizás estoy haciendo esto mal. Tus sugerencias son apreciadas.
posible duplicado de [¿El SQL Server ofrece nada que se extienden sobre DUPLICATE KEY UPDATE de MySQL] (http: // stackoverflow .com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update) –