[英]How to Batch INSERT SQL Server?
我正在嘗試將行從一個表批量插入到另一個表。
DECLARE @batch INT = 10000;
WHILE @batch > 0
BEGIN
BEGIN TRANSACTION
INSERT into table2
select top (@batch) *
FROM table1
SET @batch = @@ROWCOUNT
COMMIT TRANSACTION
END
它在前 10,000 個上運行並插入它們。 然后我收到錯誤消息“無法插入重復鍵”,它試圖插入相同的主鍵,所以我假設它試圖重復同一批。 我在這里缺少什么邏輯來循環遍歷批次? 可能很簡單,但我無法弄清楚。
任何人都可以幫忙嗎? 謝謝
您的代碼不斷插入相同的行。 您可以通過“分頁”插入來避免它:
DECLARE @batch INT = 10000;
DECLARE @page INT = 0
DECLARE @lastCount INT = 1
WHILE @lastCount > 0
BEGIN
BEGIN TRANSACTION
INSERT into table2
SELECT col1, col2, ... -- list columns explicitly
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY YourPrimaryKey ) AS RowNum, *
FROM table1
) AS RowConstrainedResult
WHERE RowNum >= (@page * @batch) AND RowNum < ((@page+1) * @batch)
SET @lastCount = @@ROWCOUNT
SET @page = @page + 1
COMMIT TRANSACTION
END
您需要某種方法來消除現有行。 你似乎有一個主鍵,所以:
INSERT into table2
SELECT TOP (@batch) *
FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t2.id = t1.id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.