Учитывая 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>
Какой самый быстрый способ в SQL Server 2005 передать этот документ в хранимую процедуру, которая вставит родительские и дочерние записи в набор таблиц, где у родительской таблицы есть столбец идентификаторов, а дочерняя таблица ссылается на родитель по внешнему ключу?
ParentTable
-----------
ParentID identity PK int
Field1 nvarchar
Field2 nvarchar
ChildTable
----------
ChildID identity PK int
ParentID FK int
Field1 nvarchar
Field2 nvarchar
Я использую ADO.NET и .NET 3.5 с C #. У меня есть возможность отправки данных в виде типа параметра xml или типа текста. Я могу использовать новые вещи XQuery для SQL Server 2005 или стиль oldschool SQL 2000 OPENXML. Или, если на самом деле возможно выполнить эти вставки, используя SqlBulkInsert или что-то в этом роде, я не согласен с тем, что является самым быстрым (производительность важна в этой ситуации.) Спасибо за вашу помощь!
EDIT:
Похоже, вставка родительских / дочерних наборов действительно так сложна, как кажется. У меня не было возможности попробовать изучить LINQ to SQL и интегрировать эту инфраструктуру в мой продукт (мы сейчас находимся в цикле разработки!), И я не смог добиться особой тяги с помощью инструмента массовой вставки Xml, хотя он и кажется может быть использован для этой цели. В конце я реструктурировал таблицы для использования первичных ключей GUID в обеих таблицах и сгенерировал полные записи в API. Тогда я смог использовать ADO 2.0 SqlBulkInsert для отправки данных с высокой скоростью. Ответ получил Дэниел Миллер, потому что массовая загрузка SQL Server имела наилучшие шансы на успех без повторной архитектуры моего приложения.