How does SqlBulkCopy circumnavigate foreign key constraints?

后端 未结 2 1800
情书的邮戳
情书的邮戳 2020-12-30 21:47

I used SqlBulkCopy to insert a collection of rows into a table. I forgot to set an integer value on the rows. The missing column is used to reference another table and this

相关标签:
2条回答
  • 2020-12-30 22:19

    By default CHECK and FOREIGN KEY constraints are ignored during bulk copy operation. SqlBulkCopy is a managed class providing functionality similar to what SQL Server bcp command offers. The bcp command has a -h hint and unless you provide the CHECK_CONSTRAINTS hint the CHECK and FOREIGN KEY constraints are ignored during the bulk load. The technet article states that - http://technet.microsoft.com/en-us/library/ms162802.aspx

    Similarly SqlBulkCopy class has a constructor which accepts SqlBulkCopyOptions enum. You would have to set the CheckConstraints enum option to ensure constraints are checked - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions(v=vs.110).aspx

    Here is an article that talks about constraint check controlling - http://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx

    Hope this helps.

    0 讨论(0)
  • 2020-12-30 22:28

    how does SqlBulkCopy manage to leave the database in an invalid state?

    It disables foreign keys on the table you are inserting into.

    Yes, this is a horrible default. Be sure to set the option CHECK_CONSTRAINTS (or CheckConstraints for SqlBulkCopy) if you can at all afford it.

    It also by default does not fire triggers which is equally terrible for data consistency. The triggers are there for a reason.

    0 讨论(0)
提交回复
热议问题