Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从单个insert语句向表中插入XML集合?_C#_Xml_Tsql - Fatal编程技术网

C# 如何从单个insert语句向表中插入XML集合?

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的形式发送,其结

我在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#app
Table-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