簡體   English   中英

如何批量插入 SQL Server?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM