说我写查询:

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中使用它等

10-08 15:12