sha*_*ack 2 sql-server datatable bind dataset
我正在从FTP站点获取制表符分隔文件并进行夜间下载.然后我使用我的数据集将其上传到表单中.我只是将其加载到数据集中并绑定它.它有效,但......
我有两个这样的文件,最初我有一个工作,只是通过手动从文件中提取所有数据,如VB 6我做了每行的插入.我假设Visual Studio 2012中的数据表或数据集的绑定将使用一个更好的算法,我认为它可能更容易,更有效.至少相对容易.
我无法访问SQL Server的服务器文件系统,因为它是一个共享环境,并且SQL Server的BULK COPY不可用.由于我的文件大小,提供程序的批量复制方法无法按照公布的方式工作.显然,这会更有效率.我猜这是我的蓝领方式.我每晚在2个进给中远程进行大约10万行的操作.每次花费大约45分钟.
我遇到的问题是这个绑定表已被锁定,因此在进行45分钟更新时无法进行任何查询或访问.它再次起作用.是否有参数或设置,我可以调用或设置允许在此更新期间使用它.
mar*_*c_s 12
一个UPDATE
在SQL Server将始终不得不采取排它锁-没办法/没招/解决这个没有破解.
但是这个独占锁只是在正在更新的单行上 - 它将在事务完成后发布.
但是:如果在单个事务中更新超过5000行,SQL Server会将行级别独占锁升级为表级锁 - 实质上是锁定整个表,直到事务完成.
我在这里看到两个选项:
如果您可以使用这种方法,您可以在单个事务中将导入分解为例如2000行的块; 这样,您可以避免表级别的独占锁,并且您的系统在导入期间将保持更快的响应.缺点是:它可能需要更长的时间,你可能会导致一些行被导入,而其他行则失败 - 你不再为整个文件获得一个干净的"全有或全无"导入
您可以启用一些跟踪标志/开关,这将关闭此锁升级机制,因此您的整个40000行导入将由行级锁处理.另一方面,这给锁管理系统带来了很多压力和额外的工作,因此可能需要更多的时间和/或更多的RAM来处理所有这些独占锁,并且在导入期间运行的查询可能会变慢(如果是39999个人)必须检查专用锁