【发布时间】:2020-04-20 18:19:49
【问题描述】:
我有两张桌子。它们都具有相同的结构,除了 table2 有一个附加列。我目前使用存储过程将数据从 table1 复制到 table2 中,如下所示。
但是,由于记录的绝对数量(超过 2000 万)以及存储过程的结构,目前这需要几个小时才能运行。
有人对如何优化代码有任何建议吗?
CREATE PROCEDURE dbo.insert_period @period INT AS
DECLARE @batchsize INT
DECLARE @start INT
DECLARE @numberofrows INT
SELECT @numberofrows = COUNT(*) from daily_table
SET @batchsize = 150000
SET @start = 1
WHILE @start < @numberofrows
BEGIN
INSERT INTO dbo.main_table WITH (TABLOCK) (
col1,
col2,
....,
col26,
time_period
)
SELECT *, @period FROM dbo.daily_table
ORDER BY id
OFFSET @start ROWS
FETCH NEXT @batchsize ROWS ONLY
SET @start += @batchsize + 1
END
我在这里使用的 id 不是唯一的。表本身没有任何键或唯一 ID。
【问题讨论】:
标签: sql sql-server stored-procedures sql-insert