sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder OUTPUT-klausulen i SQL Server för uppdatering

Prova något sånt här, du måste fortfarande använda temptabellen men det är inte så illa att läsa och det får jobbet gjort.

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



  1. Slå samman radvärden till en CSV (a.k.a GROUP_CONCAT för SQL Server)

  2. Hur man förbättrar hastigheten på InnoDB skriver per sekund av MySQL DB

  3. Parsar tnsnames.ora med hjälp av regex

  4. Introduktion till PL/SQL-samlingar i Oracle Database