Sql server 在SQLServer2008中,快速更新表中的大量行,而不阻止对引用表的插入
上下文: 我有一个系统,作为遗留会计系统的Web UI。这个遗留系统每天多次向我发送一个大文本文件,这样我就可以更新数据库中的合同表(该文件可以有新合同,或者只更新现有合同的值)。该表目前约有200万行和150列。我不能在这些更新期间停机,因为它们发生在白天,并且在任何给定的时间内通常有大约40个登录用户 我的系统的用户不能更新合同表,但他们可以在引用合同表的表中插入记录(合同表ID列的外键) 要更新我的合同表,我首先使用大容量插入将文本文件加载到一个临时表中,然后使用MERGE语句创建或更新100k条记录。这里是我的问题-在MERGE语句期间,因为我使用的是readcommitted快照隔离,用户可以继续查看数据,但不能插入任何内容-事务将超时,因为契约表被锁定 问题:是否有人知道一种方法可以快速更新如此大量的行,同时强制执行数据完整性并且不阻止引用表上的插入 我已经考虑了一些解决办法,但我希望有更好的办法:Sql server 在SQLServer2008中,快速更新表中的大量行,而不阻止对引用表的插入,sql-server,sql-server-2008,locking,large-data,Sql Server,Sql Server 2008,Locking,Large Data,上下文: 我有一个系统,作为遗留会计系统的Web UI。这个遗留系统每天多次向我发送一个大文本文件,这样我就可以更新数据库中的合同表(该文件可以有新合同,或者只更新现有合同的值)。该表目前约有200万行和150列。我不能在这些更新期间停机,因为它们发生在白天,并且在任何给定的时间内通常有大约40个登录用户 我的系统的用户不能更新合同表,但他们可以在引用合同表的表中插入记录(合同表ID列的外键) 要更新我的合同表,我首先使用大容量插入将文本文件加载到一个临时表中,然后使用MERGE语句创建或更新1
结果我把外键掉了。由于该系统已投入生产一段时间,并且日志从未显示违反外键约束的情况,因此我非常确定不会创建不一致的数据。感谢所有发表评论的人。可能重复:如果您有enterprise edition,您可以研究“热插拔分区”…下面是一篇示例文章: