Microsoft SQL Server批处理处理中间歇性提交在存储过程中



我试图将数百万记录从另一个表(在同一Microsoft SQL Server中)插入Microsoft SQL Server表中,并使用row_number()函数进行批处理计算,如下所示。

CEILING((ROW_NUMBER() OVER (ORDER BY ITEM,LOC))/CONVERT(FLOAT,'''
                       +CONVERT(VARCHAR(55),@PLANNING_BATCH_SIZE)+'''))-1+convert(float,'''+convert(varchar(55),@PREVIOUSEBATCHSIZE)+''' ) AS BATCH_NUM

一旦将所有这些记录插入带有批处理号的表,我将通过使用每个批处理数据来调用Java方法来启动另一个过程。

现在要插入数百万记录,这需要几分钟的时间,Java方法必须等到整个插入完成。我的问题是,我们在SQL Server中有任何选择以应用间歇性提交 INSERT INTO SELECT查询。

如果要插入一些行,提交,然后开始插入另一个,则需要分批进行。我们几乎没有信息要浏览,因此这是一个非常简单的pseudo-sql示例可能 小批量插入数据:

BEGIN TRANSACTION;
INSERT INTO YourDestinationTable ({COLUMNS})
SELECT TOP 1000
       {COLUMNS}
FROM YourSourceTable ST
WHERE NOT EXISTS (SELECT 1
                  FROM YourDestinationTable YD
                  WHERE YD.{IDENTITY COLUMN} = ST.{IDENTITY COLUMN});
COMMIT;
WHILE @@ROWCOUNT > 0 BEGIN
    BEGIN TRANSACTION;
    INSERT INTO YourDestinationTable ({COLUMNS})
    SELECT TOP 1000
           {COLUMNS}
    FROM YourSourceTable ST
    WHERE NOT EXISTS (SELECT 1
                      FROM YourDestinationTable YD
                      WHERE YD.{IDENTITY COLUMN} = ST.{IDENTITY COLUMN});
    COMMIT;
END;

最新更新