DECLARE @tmpTable TABLE (UserId INT, Name nvarchar(50), Department nvarchar(50))
DECLARE @xml XML=
N'<user><userId>1</userId><name>John</name><department>A</department></user>
<user><userId>2</userId><name>Jane</name><department>B</department></user>';
insert into @tmpTable
SELECT
a.b.value('(./userId)[1]', 'int') AS UserId,
a.b.value('(./name)[1]', 'nvarchar(50)') AS Name,
a.b.value('(./department)[1]', 'nvarchar(50)') AS Department
FROM @xml.nodes('/user') a(b)
INSERT INTO members (name)
OUTPUT Inserted.MemberId
SELECT Name FROM @tmpTable
现在输出新成员的id。我需要对另一个表进行另一次插入,这需要:
MemberId, UserId, Name, Department
我不知道怎么写这个插页。
1条答案
按热度按时间pnwntuvh1#
您需要记录/跟踪在第一次插入时创建的标识id。但你需要以一种固定的方式来追踪(你只跟踪了一个带有“output inserted.memberid”的条目(我想)
给你:
您可以使用#audit表插入到其他表中..因为您现在有标识的记录(具有相应的名称)。
请注意,如果“myname”上没有唯一的约束,这可能会崩溃。
“审核”插入的原因是为了避免在dbo.member表中找到新标识……(假设dbo.member表中已经有1000000行……,审核将防止重新查找该表)
看见
https://granadacoder.wordpress.com/2008/12/10/sqlserver20052008-output-clause-in-insertupdatedelete-statements/
举个例子:
追加
注意,不能“跳过”审核表。#audit表只能包含父insert中的部分信息(您拥有的任何属性,当然还有新的标识,这是您所追求的)
这是我想你要找的((使用小提琴)