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

Sha*_*pta 7 sql sql-server-2008

DECLARE @t2 AS TABLE(id INT)  

INSERT INTO dbo.EntityMaster
        (EntityType)
OUTPUT INSERTED.EntityId INTO @t2
SELECT 'G' FROM #tmp
Run Code Online (Sandbox Code Playgroud)

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

@t2我没有插入记录,而是需要更新#tmp每条记录.

有可能吗?

小智 1

尝试这样的事情,您仍然需要使用临时表,但它读起来还不错,并且可以完成工作。

创建表#tmp
(
    tmpID INT IDENTITY(1,1) 主键聚集,
    xmlData VARCHAR(255),
    实体 ID INT
)
声明 @t2 表
(
    tmpID INT,
    实体 ID INT
)

合并 dbo.EntityMaster 作为 EM
使用
(
    选择 tmpID,
        xml数据,
        实体ID
    来自#tmp
) AS X
    ON EM.EntityId = X.EntityId
当不匹配时
    INSERT(实体类型)
    值(X.xmlData)
输出 X.tmpID,插入.EntityId
INTO @t2 (tmpID, EntityId);

更新时间
SET EntityId = T2.EntityId
来自 @t2 T2
内连接 #tmp T
    ON T2.tmpID = T.tmpID