C# 如何从单个insert语句向表中插入XML集合?
我在SQLServer中有这个表结构C# 如何从单个insert语句向表中插入XML集合?,c#,xml,tsql,C#,Xml,Tsql,我在SQLServer中有这个表结构 Table-A AID int (PK)--> set to autoincrement Name varchar(200) Table - B BID int PK --> NOT set to auto increment AID int PK FK Number1 int Holographic decimal(16,2) A和B之间的关系是1:M。 因此,从我的C#appTable-B中,数据以XML的形式发送,其结
Table-A
AID int (PK)--> set to autoincrement
Name varchar(200)
Table - B
BID int PK --> NOT set to auto increment
AID int PK FK
Number1 int
Holographic decimal(16,2)
A
和B
之间的关系是1:M
。
因此,从我的C#appTable-B
中,数据以XML
的形式发送,其结构如下
<TABLEB>
<RECORD>
<BINID>23</BINID>
<NUMBER1>123</NUMBER1>
<HOLOGRAPHIC>2345.12</HOLOGRAPHIC>
</RECORD>
<RECORD>
<BINID>3</BINID>
<NUMBER1>346233</NUMBER1>
<HOLOGRAPHIC>12.345</HOLOGRAPHIC>
</RECORD>
</TABLEB>
23
123
2345.12
3.
346233
12.345
在我的
SQL
中,首先将Name
记录插入Table-A
,然后插入Table-B
。要获得AID
我必须首先插入表A
。是否有一种方法可以使用AID
值一次性保存xml
记录?{因为xml
中没有AID
值}您可以创建一个存储过程来实现这一点。我不知道如何将名称插入第一个表,但以下是sp如何插入所有记录:
Create procedure insertSomething
@name as nvarchar(max),
@xmlData as xml
as
begin
declare @aid int;
-- insert data to table A
insert into tableA (Name) Values(@name);
select @aid = scope_identity(); -- gets newly created identity value
-- Shred xml data
Declare @docH int; -- Create document handle
-- get xml data
Declare @x as xml = @xmlData;
-- prepare xml doc
EXEC [sys].[sp_xml_preparedocument] @docH OUTPUT, @x
--get xml data in table format and insert into your destination table
insert into tableB (bid, aid, Number, Holographic)
SELECT BINID, @aid, NUMBER1, HOLOGRAPHIC
FROM OPENXML(@docH, '/TABLEB/RECORD', 3)
WITH(BINID int, NUMBER1 int, HOLOGRAPHIC decimal(16,2))
EXEC [sys].[sp_xml_removedocument] @docH
end
然后,按如下方式运行:
DECLARE @z AS XML = '<TABLEB>
<RECORD>
<BINID>23</BINID>
<NUMBER1>123</NUMBER1>
<HOLOGRAPHIC>2345.12</HOLOGRAPHIC>
</RECORD></TABLEB>'
EXEC [dbo].[insertSomething] @name = N'name', -- nvarchar(max)
@xmlData = @z -- xml
将@z声明为XML=
23
123
2345.12
'
EXEC[dbo].[insertSomething]@name=N'name',--nvarchar(最大值)
@xmlData=@z--xml