Vim*_*987 11 .net c# sql-server sqlbulkcopy
我想在SQL Server中插入许多行(从Entity Framework对象构造).问题是,某些字符串属性的长度超出了数据库中列的长度,这会导致异常,然后所有行都无法插入到数据库中.
所以我想知道如果有办法告诉SqlBulkCopy自动截断任何超长行?当然,在将每个属性超出有限长度之前,我可以检查并对其进行子串,然后将其插入到DataTable中,但这会降低整个程序的速度.
始终使用暂存/加载表进行批量操作.
然后,您可以在刷新到真实表之前处理,清理,擦除等数据.这包括LEFT,查找,重复数据删除等
所以:
INSERT realtable (..) SELECT LEFT(..), .. FROM Staging
不幸的是,没有直接的方法可以做到这一点SqlBulkCopy
.SQL Bulk Inserts本质上几乎是"哑",但这就是为什么它们如此之快.它们甚至没有被记录(捕获SqlRowsCopied
事件除外),因此如果出现故障,则没有太多信息.你在寻找什么会在某种程度上违背这门课程的目的
但是可以有两种可能的方式:
您可以尝试使用SqlBulkCopyOptions
Enumeration(传递给SqlBulkCopy()构造函数)并使用SqlBulkCopyOptions.CheckConstraints
(在插入数据时检查约束.默认情况下,不检查约束.).
或者,您可以使用 SqlBulkCopyOptions.FireTriggers
Enumeration(指定时,使服务器触发插入到数据库中的行的插入触发器.)并在SQL Server中处理异常Insert Trigger
.