[英]C# and SQL Server 2008 - Batch Update
我有一个要求,我需要在实时数据库表中更新数千条记录,虽然这个表中有很多列,但我只需要更新2-3列。
此外,我无法点击数千次只是为了更新,可以使用SQL Server表值参数在批量更新中完成。 但同样,我不应该一次更新所有数千条记录以获得更好的错误处理,而是希望批量更新x * 100中的记录。
因此,以下是我的方法,请为任何其他替代方案或建议流程的任何变更提供宝贵意见 -
List<T> MainCollection
Status = Pending
Status = Pending
XML文件中取出第一个'n'个元素,并将它们添加到新的List<T> SubsetCollection
List<T> SubsetCollection
- 对T
进行必要的更改 List<T> SubsetCollection
转换为DataTable Status = Processed
对应于List<T> SubsetCollection
XML元素 请指导更好的方法或上述过程中的任何增强。
如果可能的话,我会做一个仅限数据库的方法,如果不可能,我会删除最慢的部分。 如果您无法在存储过程中执行所有工作,则检索所有记录并进行更改。
下一步是使用SQL批量复制将更改写入临时表。 这是一个快速批量加载,将在几秒钟内复制数千条记录。 您将存储主键和要更新的列以及批号。 批次编号分配给每批记录,因此允许加载另一批次而不与第一批次冲突。
使用服务器上的存储过程根据性能分批处理100或1000的记录。 将批次编号传递给存储过程。
我们使用这种方法批量加载和更新数百万条记录。 通过消除网络并允许数据库服务器处理大部分工作来获得最佳速度。
我希望这可以为您提供另一种评估方案。
它可能不是最佳实践,但您可以在SQL Server CLR函数中嵌入一些逻辑。 可以通过Query,StoProc或在某个时间运行的调度来调用此函数。
我能看到的唯一问题是获得第4步以对T
进行必要的更改。 将该逻辑嵌入到数据库中可能对维护有害,但这对于将大量业务逻辑嵌入StoProcs的人来说并没有什么不同。
无论哪种方式,SQL Server CLR功能都可能成为可能。 您可以在Visual Studio 2008,2010中创建它们(检查数据库的新项目类型)。
教程: http : //msdn.microsoft.com/en-us/library/w2kae45k( v= vs.80).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.