我有几个大表(188米和144米行)我需要从视图中填充,但每个视图包含几亿行(将伪维度建模数据拉到一个平面形式).每个表上的键超过50个复合字节的列.如果数据在表中,我总是可以考虑使用sp_rename来创建另一个新表,但这不是一个真正的选择.
如果我执行单个INSERT操作,该进程会使用大量的事务日志空间,典型地将其归档并引发一些DBA的麻烦. (是的,这可能是DBA应该处理/设计/架构师的工作)
我可以使用SSIS并使用批量提交将数据流式传输到目标表中(但这确实需要通过网络传输数据,因为我们不允许在服务器上运行SSIS包).
除了使用某种键将行分配到多个INSERT操作以将行分配到不同的批次并进行循环之外的任何其他事情?
解决方法
您可以对数据进行分区并在游标循环中插入数据.这与SSIS batchinserting几乎相同.但是在你的服务器上运行.
create cursor .... select YEAR(DateCol),MONTH(DateCol) from whatever while .... insert into yourtable(...) select * from whatever where YEAR(DateCol) = year and MONTH(DateCol) = month end