【发布时间】:2008-10-13 00:45:15
【问题描述】:
每晚,我需要使用超过 800 万条记录从 ODBC 源填充 SQL Server 2005 表。目前我正在使用来自链接服务器的插入语句,其语法选择类似于:
Insert Into SQLStagingTable from Select * from OpenQuery(ODBCSource, 'Select * from SourceTable')
这确实效率低下,需要数小时才能运行。我正在使用类似于this question 中的代码的 SqlBulkInsert 代码编写解决方案。
该问题中的代码首先在内存中填充数据表,然后将该数据表传递给 SqlBulkInserts WriteToServer 方法。
如果填充的数据表使用的内存比它正在运行的机器上的可用内存多(在我的例子中是 16GB 内存的服务器),我该怎么办?
我考虑过使用重载的 ODBCDataAdapter fill 方法,它只允许您填充从 x 到 n 的记录(其中 x 是起始索引,n 是要填充的记录数)。然而,这可能是一个比我目前拥有的更慢的解决方案,因为这意味着在源上多次重新运行 select 语句。
我该怎么办?只需一次填充整个内容并让操作系统管理内存?我应该分块填充它吗?还有其他我没有想到的解决方案吗?
【问题讨论】:
标签: c# .net sql-server vb.net sqlbulkcopy