在具有父子关系的表中批量插入数据

时间:2018-08-11 01:14:12

标签: c# sql sql-server c#-4.0 petapoco

我正在研究一个函数,该函数将在具有父子关系的表中插入数据。我当前的实现是迭代对象以将它们一个接一个地插入。我正在考虑使用SQL或C#或PetaPoco进行批处理插入以减少数据库往返。有人有主意吗?

int

http://sqlfiddle.com/#!7/5edc6/6

2 个答案:

答案 0 :(得分:0)

当您遍历数据并对多行执行一个INSERT时,您可以收集数据。

INSERT INTO Persons
            (PersonID,
             ParentID,
             Lastname,
             Firstname)
            VALUES (1,
                    null,
                    'John',
                    'Doe'),
                   (2,
                    1,
                    'Mary',
                    'Doe'),
                   ...;

答案 1 :(得分:0)

  1. 创建具有相同结构的工作表(例如,命名为TableB)
  2. 将数据插入TableB(在c#中,您可以使用datatable和SqlBulkCopy以获得最佳性能,外观为here
  3. 使用工作表将数据插入最终表,但将parent列设置为null,如下所示:

    插入表A(PersonID,LastName,FirstName) 从tableA中选择PersonID,LastName和FirstName;

  4. 使用工作表更新父级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方法直接插入到最终表中,因为该方法禁用了我认为的约束,但这确实很危险……约束存在是有原因的。