2

または何か13 millionを使用して段階的に行を更新するにはどうすればよいですか?cursor

現在のスクリプトによる更新は数日間実行され、まだ完了していません。

フィールドがありrow_idます。1 - 13m

1 つのフィールドのみを更新する必要があります。

    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
4

2 に答える 2

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
于 2013-08-22T10:29:32.863 に答える
0

この下のリンクには、必要な操作を行うための 3 つの方法があります。

http://ksadba.wordpress.com/2008/06/16/updating-millions-of-rows-merge-vs-bulk-collect/

于 2013-08-22T10:35:24.780 に答える