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

Comment utiliser la clause OUTPUT de SQL Server pour la mise à jour

Essayez quelque chose comme ça, vous devez toujours utiliser la table temporaire mais ce n'est pas trop mal à lire et ça fait le travail.

CREATE TABLE #tmp
(
    tmpID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
    xmlData VARCHAR(255),
    EntityId INT
)
DECLARE @t2 TABLE
(
    tmpID INT,
    EntityId INT
)

MERGE dbo.EntityMaster AS EM
USING
(
    SELECT tmpID,
        xmlData,
        EntityId
    FROM #tmp
) AS X
    ON EM.EntityId = X.EntityId
WHEN NOT MATCHED THEN
    INSERT (EntityType)
    VALUES (X.xmlData)
OUTPUT X.tmpID, INSERTED.EntityId
INTO @t2 (tmpID, EntityId);

UPDATE T
SET EntityId = T2.EntityId
FROM @t2 T2
INNER JOIN #tmp T
    ON T2.tmpID = T.tmpID