sql >> Database >  >> RDS >> Sqlserver

Hoe de OUTPUT-clausule van SQL Server te gebruiken voor update

Probeer zoiets als dit, je moet nog steeds de tijdelijke tabel gebruiken, maar het is niet zo erg om te lezen en het klaart de klus.

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. Php meerdere db-omgeving met git &phpfog

  2. Liquibase laat alle functies vallen - postgresql

  3. Waarde invoegen en instellen met max()+1 problemen

  4. Hoe afhankelijkheden in een orakelpakket te vinden?