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
。
我需要为每条记录更新@t2
,而不是将记录插入#tmp
。
有可能吗?
答案 0 :(得分:1)
尝试类似这样的东西,你仍然需要使用临时表,但它不是太糟糕,无法阅读并完成工作。
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 :(得分: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))
的同时,您是否可以使用#tmp
生成所需的ID?