По аналогии с этими другими вопросами, отмеченными ниже, у меня есть две таблицы со структурой:
create table parent (
recno int identity(1,1) primary key not null,
groupCode int,
parentdata varchar(80)
);
create table child (
parentrecno int not null,
childdata varchar(80)
)
Мне нужно быстро вставить несколько сотен тысяч записей в эти таблицы - и в таблицах содержатся миллионы других записей, не связанных с этой вставкой, и они никогда не будут тихими. Из-за характера родителя / ребенка, это не хороший кандидат (кажется) для SqlBulkCopy
.
В C # с использованием SqlCommand
с INSERT
Я получаю около 400-500 записей в секунду, и это слишком медленно. Псевдокод:
foreach(Record r in parentRecords)
{
Insert Fields from r into SqlCommand Parameters but not "recno"
Call ExecuteScalar to insert and fetch the inserted identity value (recno)
foreach(ChildRecord cr in parentRecords.Children)
{
Insert Fields from cr into SqlCommand Parameters
Insert the identity value (recno) from above into Parameters
(as parentrecno)
Call ExecuteNonQuery to insert the record
}
}
После прочтения этих постов мне пришла в голову мысль. groupCode
, прикрепленный к родительским записям, уникален для того набора родительских записей, которые я вставляю. Будет ли это работать для:
- Массовая вставка родительских записей с помощью
SqlBulkCopy
, позволяющая вставке автоматически генерировать поле идентификации recno
как обычно.
Выполните SELECT
только для вставленных записей:
select recno from parent where groupCode = @thisgroup order by recno;
Используйте полученные значения для заполнения полей parentrecno
для дочерних записей в памяти
- Массовая вставка дочерних записей с
SqlBulkCopy
Это будет зависеть от того, будут ли родительские записи поступать в таблицу SQL в том же порядке, в котором они находятся в исходной таблице данных (и значения идентификаторов назначаются в том же порядке). Могу ли я на это положиться?
Похожие вопросы:
Как обновить родительские и дочерние таблицы набора данных с помощью автоматически сгенерированного идентификационного ключа?
SqlBulkCopy и DataTables с отношением родитель / потомок в столбце идентификаторов