[英]Update 13 million rows - SQL Server 2008
如何通过使用cursor
或其他方式分阶段更新13 million
行?
当前脚本的更新已运行了几天,但仍未完成。
有一个row_id
字段。 1 - 13m
仅一个字段需要更新。
UPDATE
[CIPC].[dbo].[tbldirector]
SET
[CIPC].[dbo].[tbldirector].ENT_NUM = REG.Ent_Number
FROM
[CIPC].[dbo].[tbldirector] DIR
INNER JOIN
[Cipc].[dbo].[tblregister] REG
ON
DIR.ENT_LONGNAME = REG.ENT_NAME
在这种情况下,您不需要cursor
。 您可以使用这样的循环来做到这一点。
DECLARE @indx int, @StepSize INT
SET @indx = 1
SET @StepSize = 100000
BEGIN TRAN
WHILE (EXISTS(SELECT 0 FROM [CIPC].[dbo].[tbldirector] WHERE row_id >= @indx))
BEGIN
PRINT 'Going to update indx ' + REPLICATE(CONVERT(VARCHAR, @indx) + ' -- ' + CONVERT(VARCHAR, @indx + @StepSize) + ' | ', 200)
UPDATE [CIPC].[dbo].[tbldirector]
SET [CIPC].[dbo].[tbldirector].ENT_NUM = REG.Ent_Number
FROM [CIPC].[dbo].[tbldirector] DIR
INNER JOIN [Cipc].[dbo].[tblregister] REG
ON DIR.ENT_LONGNAME = REG.ENT_NAME
WHERE row_id BETWEEN @indx AND @indx + @StepSize
SELECT @indx = @indx + @StepSize
SELECT REPLICATE(LEFT(CONVERT(VARCHAR, @indx) + ' | ', 10), 200)
END
COMMIT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.