Массовая вставка DataSet с несколькими связанными таблицами в SQL Server C # - PullRequest
0 голосов
/ 27 августа 2018

У меня есть DataSet с несколькими таблицами, исходным документом является файл XML.

mydataset.ReadXML(filename);

Есть несколько таблиц с несколькими отношениями. У меня есть база данных в SQL, созданная с помощью кодов - таблиц, столбцов и отношений.

Теперь я хотел бы вставить данные. (Да я хочу все). РЕДАКТИРОВАТЬ: Таблицы SQL используют автогенерацию столбцов идентификации - потому что я не уверен, что входящие данные никогда не будут дублировать один из параметров, который я хотел бы предположить, является уникальным.

Итак, какие методы я должен сделать, чтобы гарантировать ввод данных, учитывая, что у меня есть ограничения внешнего ключа, как я должен перебирать таблицы в наборе данных, чтобы убедиться, что я не пытаюсь вставить в таблицы, требующие существующего идентификатора. Я создаю жестко закодированную карту (я предпочитаю не слишком), или я иду по таблицам в поисках внешнего ключа и проверяю родительскую таблицу и т. Д.

Есть идеи? Я уверен, что кто-то делал это раньше и имеет простой ответ для меня.

1 Ответ

0 голосов
/ 27 августа 2018

У вас есть несколько вариантов. Предполагая, что база данных не генерирует значения ключей, это довольно просто. Либо

1) Вы обнаруживаете порядок загрузки таблиц, так что каждая таблица с внешним ключом загружается после таблицы, к которой она относится.

2) Вы отключаете проверку ограничений в SqlBulkCopy , а затем дополнительно проверяете ограничения после загрузки.

Чтобы проверить ограничения после загрузки, выполните команду, подобную

alter table SomeTable with check check constraint fk_SomeTable_OtherTable

Если у вас есть сгенерированные базой данных ключи, это все сложнее. Но лучший способ справиться с этим - использовать объекты SEQUENCE вместо столбцов IDENTITY и запустить sp_sequence_get_range , чтобы получить новые диапазоны ключей для клиента и сначала применить ключи там.

...