我正在尝试向表中插入大量记录。这是场景:
SQL Server 2008(数据库为 2005)
目标表有一个聚集索引 (PK)。该字段应该是一个身份,但是数据库的开发人员(我们无法更改它,因为它会影响程序)将其创建为一个整数。每次程序需要向表中添加一行时,请查看最大 id(
historyno
在这种情况下)并求和。当我们需要同时插入大量记录时,这会影响我们的性能,因此我们创建了一个流程来
AKT_ES_CampTool_TempHist
在生产时间之外从临时表 () 中插入行。问题是,在一小时内,它只插入 8K 行。考虑到我们需要插入超过 120K,我们用完了几个小时。
我们使用的代码如下。请,如果有人有任何改进它的想法,将不胜感激。
DECLARE @HistNo AS INT
WHILE EXISTS (SELECT * FROM AKT_ES_CampTool_TempHist WHERE Inserted = 0)
BEGIN
SELECT @HistNo=MIN(HistoryNo) FROM AKT_ES_CampTool_TempHist WHERE Inserted = 0
INSERT INTO NOVADB.dbo.niHist (
HistoryNo,ObjectType,ObjectNo,SubNo,ReferenceNo,
Time,Type,Priority,Collector,Code,
Action,RemainingAmount,Obliterated,SubType,ActSegment,
Data,FreetextData,quantity
)
SELECT
(SELECT max(historyNo)+1
FROM NOVADB..niHist),ObjectType,ObjectNo,SubNo,ReferenceNo,
Time,Type,Priority,Collector,Code,
Action,RemainingAmount,Obliterated,SubType,ActSegment,
Data,FreetextData,quantity
FROM AKT_ES_CampTool_TempHist
WHERE HistoryNo=@HistNo
UPDATE AKT_ES_CampTool_TempHist
SET Inserted=1
WHERE HistoryNo=@HistNo
END