Jam*_*Orr 0 c# xml sql-server ado.net bulkinsert
给出一个如下所示的xml文档:
<parentRecords>
<parentRecord field1="foo" field2="bar">
<childRecord field1="test" field2="text" />
<childRecord field1="test2" field2="text2" />
</parentRecord>
<parentRecord field1="foo2" field2="bar2">
<childRecord field1="test3" field2="text3" />
<childRecord field1="test4" field2="text4" />
</parentRecord>
</parentRecords>
Run Code Online (Sandbox Code Playgroud)
SQL Server 2005中将此文档传递给存储过程的最快方法是什么,该存储过程将父记录和子记录插入到一组表中,其中父表具有标识列,子表引用父表一把外键?
ParentTable
-----------
ParentID identity PK int
Field1 nvarchar
Field2 nvarchar
ChildTable
----------
ChildID identity PK int
ParentID FK int
Field1 nvarchar
Field2 nvarchar
Run Code Online (Sandbox Code Playgroud)
我正在使用ADO.NET和.NET 3.5与C#.我可以选择将数据作为xml参数类型或文本类型发送.我可以使用新奇的sql 2005 XQuery东西或oldschool SQL 2000 OPENXML样式.或者,如果实际上可以使用SqlBulkInsert或类似的东西来完成这些插入,那么我最沮丧的是(在这种情况下性能很重要.)感谢您的帮助!
编辑:
看起来插入父/子集确实看起来很困难.我无法尝试学习LINQ to SQL并将该框架集成到我的产品中(我们在这里处于开发周期!)并且我无法在Xml批量插入工具中获得太多牵引力,尽管它看起来像可以用于此目的.最后,我重新构建了表以在两个表上使用GUID主键,并在API中生成完整记录.然后我能够使用ADO 2.0 SqlBulkInsert高速发送数据.答案授予Daniel Miller,因为SQL Server Bulk Load在没有重新构建我的应用程序的情况下获得成功的机会最大.
像这样的东西将提取父母,然后是父母领域的孩子
DECLARE @fooxml xml
SET @fooxml = N'<parentRecords>
<parentRecord field1="foo" field2="bar">
<childRecord field1="test" field2="text" />
<childRecord field1="test2" field2="text2" />
</parentRecord>
<parentRecord field1="foo2" field2="bar2">
<childRecord field1="test3" field2="text3" />
<childRecord field1="test4" field2="text4" />
</parentRecord>
</parentRecords>'
SELECT
x.item.value('@field1', 'varchar(100)') AS field1,
x.item.value('@field2', 'varchar(100)') AS field2
FROM
@fooxml.nodes('/parentRecords/parentRecord') x(item)
SELECT
x.item.value('@field1', 'varchar(100)') AS field1,
x.item.value('@field2', 'varchar(100)') AS field2,
y.item.value('@field2', 'varchar(100)') AS childfield2,
y.item.value('@field2', 'varchar(100)') AS childfield2
FROM
@fooxml.nodes('/parentRecords/parentRecord') x(item)
CROSS APPLY
x.item.nodes('./childRecord') AS y(item)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3074 次 |
| 最近记录: |