一尘不染

如何使用SQL Server的OUTPUT子句进行更新

sql

DECLARE @t2 AS TABLE(id INT)

INSERT INTO dbo.EntityMaster
        (EntityType)
OUTPUT INSERTED.EntityId INTO @t2
SELECT 'G' FROM #tmp

#tmp是一个临时表,其中包含从xml加载的数据。我需要为中EntityId包含的每个记录生成一个#tmp。可以通过先将记录插入EntityMaster表中,然后再#tmp为每个记录插入该实体id来完成。

无需将记录插入@t2,我需要#tmp为每个记录进行更新。

有没有可能


阅读 132

收藏
2021-05-23

共1个答案

一尘不染

尝试类似这样的事情,您仍然必须使用temp表,但它的可读性还不错,并且可以完成工作。

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
2021-05-23