Whenever you experience slow updates or timeouts errors on updating columns you can update it incrementally by using the script below.
The WaitForDelay is added to permit the run of other processes (including a transaction log backup.). The script only works if one of the source columns which are used to update, cannot contain NULL values. If that's not the case you have to add a column (i.e. 'updated'). You should update this with a certain value (i.e. '1'). Use this column to determine @Count ('where updated <> 1') and to filter in the 'where clause' the update query ('and updated <> 1').
SQL 2005 Syntax:
DECLARE @Batch int
DECLARE @Rownum int
DECLARE @PrevRownum int
SET @Batch = 10000
SET @Rownum = 1
WHILE (@Rownum > 0)
BEGIN
UPDATE TOP(@Batch) UPDATE_TABLE
SET
UPDATE_COLUMN1 = S.SOURCE_COLUMN1
, UPDATE_COLUM2 = S.SOURCE_COLUMN2
FROM SOURCE_TABLE c
WHERE UPDATE_TABLE.ID = SOURCE_TABLE.ID
AND UPDATE_COLUMN1 IS NULL
SET @Prevrownum = @Rownum
SELECT @Rownum = COUNT(*) FROM UPDATE_TABLE
WHERE UPDATE_COLUMN1 IS NULL
IF @Prevrownum = @Rownum
set @ROWNUM = 0
WAITFOR DELAY '000:00:05'
END
RETURN
No comments:
Post a Comment
Thanks for your comment.