jon*_*ers 3 sql t-sql sql-server sql-server-2005
假设我写了查询:
INSERT INTO DestinationTable
(ColumnA, ColumnB, ColumnC, etc.)
SELECT FROM SourceTable
(ColumnA, ColumnB, ColumnC, etc.)
Run Code Online (Sandbox Code Playgroud)
我的源表有2200万行.
SQL服务器填满我的硬盘驱动器,并出错.
为什么SQL服务器无法处理我的查询?
我应该使用游标并一次插入一行吗?
PS - 它是SQL Express 2005,但我可以尝试完整版.
更新:我还想提一下,当我在管理工作室查看时,我的源表只占用大约1GB的存储空间.然而,我的25GB可用磁盘空间不知何故被填满了吗?我也在使用2个不同的数据库Source.mdf - > Destination.mdf,我不知道这是否有任何区别.
批量更新......
INSERT INTO DestinationTable
(ColumnA, ColumnB, ColumnC, etc.)
SELECT TOP 100000 ColumnA, ColumnB, ColumnC, etc.
FROM SourceTable
WHERE NOT EXISTS (SELECT *
FROM DestinationTable
WHERE DestinationTable.KeyCols = SourceTable.KeyCols)
WHILE @@ROWCOUNT <> 0
INSERT INTO DestinationTable
(ColumnA, ColumnB, ColumnC, etc.)
SELECT TOP 100000 ColumnA, ColumnB, ColumnC, etc.
FROM SourceTable
WHERE NOT EXISTS (SELECT *
FROM DestinationTable
WHERE DestinationTable.KeyCols = SourceTable.KeyCols)
Run Code Online (Sandbox Code Playgroud)
如果您需要在一个txn等中处理检查点,日志文件管理,则有各种变体
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |