如何使用13 million
或其他内容分阶段更新cursor
行?
使用当前脚本进行更新会运行数天但仍未完成。
有一个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
答案 0 :(得分:4)
在这种情况下,您不需要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
答案 1 :(得分:0)