我正在研究一个函数,该函数将在具有父子关系的表中插入数据。我当前的实现是迭代对象以将它们一个接一个地插入。我正在考虑使用SQL或C#或PetaPoco进行批处理插入以减少数据库往返。有人有主意吗?
int
答案 0 :(得分:0)
当您遍历数据并对多行执行一个INSERT
时,您可以收集数据。
INSERT INTO Persons
(PersonID,
ParentID,
Lastname,
Firstname)
VALUES (1,
null,
'John',
'Doe'),
(2,
1,
'Mary',
'Doe'),
...;
答案 1 :(得分:0)
使用工作表将数据插入最终表,但将parent列设置为null,如下所示:
插入表A(PersonID,LastName,FirstName) 从tableA中选择PersonID,LastName和FirstName;
使用工作表更新父级ID
更新f1 设置f1.parentid = f2.parentID 来自f1.PersonID = f2.PersonID上的tableA f1内部联接tableB f2;
注意1:3.和4.如果要在发生错误时回滚,则应该在同一事务中
注2:在Microsoft为SqlBulkCopy提供的示例中,他们构建了数据表的结构,但是您可以使用数据集对象执行“从tableA中选择top 0 * from tableA”并为此获取数据表
注3:您可以使用sqlbulkcopy方法直接插入到最终表中,因为该方法禁用了我认为的约束,但这确实很危险……约束存在是有原因的。