我正尝试使用row_number()
函数通过如下所示的批号计算将数百万条记录从另一个表(在同一Microsoft SQL Server中)插入另一个表的Microsoft SQL Server表中。
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
个查询。
答案 0 :(得分:0)
如果要插入一些行,请提交,然后开始插入另一行,则需要分批执行。我们此处的信息很少,因此这是一个非常个简单的伪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;