BULK INSERT
またはbcp
45,000の挿入ステートメントよりも適切なオプションのようです。
挿入ステートメントに固執する必要がある場合、いくつかのオプションを検討します。
A:トランザクションを使用し、各ステートメントで100または500または1000ステートメントのバッチをラップして、ログおよびバッチへの影響を最小限に抑えます。例えば
BEGIN TRANSACTION;
INSERT dbo.table(a, ...) SELECT 1, ...
INSERT dbo.table(a, ...) SELECT 2, ...
...
INSERT dbo.table(a, ...) SELECT 500, ...
COMMIT TRANSACTION;
GO
BEGIN TRANSACTION;
INSERT dbo.table(a, ...) SELECT 1, ...
INSERT dbo.table(a, ...) SELECT 2, ...
...
INSERT dbo.table(a, ...) SELECT 500, ...
COMMIT TRANSACTION;
GO
B:個々の挿入ステートメントの代わりにUNION ALL
、一度に100または500ステートメントに使用します。たとえば、
INSERT dbo.table(a, ...)
SELECT 1, ...
UNION ALL SELECT 2, ...
...
UNION ALL SELECT 500, ...
GO
INSERT dbo.table(a, ...)
SELECT 501, ...
UNION ALL SELECT 502, ...
...
UNION ALL SELECT 1000, ...
GO
簡潔にするためにエラー処理を省略しましたが、ポイントは、45,000の個々のステートメントの単一バッチをSQL Serverに送信しようとしないことです。