说我写查询:
INSERT INTO DestinationTable
(ColumnA, ColumnB, ColumnC, etc.)
SELECT FROM SourceTable
(ColumnA, ColumnB, ColumnC, etc.)
我的源表有2200万行。
SQL Server填满了我的硬盘驱动器,并且出现了错误。
为什么SQL Server无法处理我的查询?
我应该使用游标并一次插入一行吗?
PS-这是SQL Express 2005,但我可以尝试使用完整版本。
更新:我还想提及一下,当我在Management Studio中查看源表时,它仅占用约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)
有多种处理检查点,日志文件管理的功能,如果您需要在一个txn中使用它等