7
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表中然后将此实体ID 插入#tmp每条记录来完成。

@t2我需要更新#tmp每条记录,而不是将记录插入。

有什么可能吗?

4

2 回答 2

1

尝试这样的事情,你仍然必须使用临时表,但它读起来还不错,它可以完成工作。

创建表#tmp
(
    tmpID INT IDENTITY(1,1) 主键集群,
    xmlData VARCHAR(255),
    EntityId INT
)
声明@t2 表
(
    tmpID INT,
    EntityId INT
)

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

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

于 2012-10-01T13:18:35.040 回答
0

这在将 XML 记录插入#tmp表的 SQL 中更容易实现。

考虑下@recs表,可以将其视为从 XML 生成的一组记录:

declare @recs table (val varchar(255))
insert into @recs values ('this'), ('is'), ('a'), ('test')

您可以像这样轻松地将递增整数添加到每条记录:

select row_number() over (order by (select 1)) as id, val from @recs

结果如下所示:

id  val
1   this
2   is
3   a
4   test

您可以row_number() over (order by (select1))在插入记录的同时生成所需的 id#tmp吗?

于 2012-09-13T21:53:11.577 回答