[SQL Server] 同一時間 UPDATE 多筆資料的注意事項

  • 6653
  • 0

有時候遇到一些原因,我們必須在營運中的資料庫上 update 多筆資料,但是營運中的情況下又會擔心是否鎖住該張 TABLE 太久,此時我們可以透過迴圈,試著分成多次來 update ,至少不會一次就 update 太久,避免該 TABLE 鎖住太久。

.建立測試資料

CREATE TABLE

CREATE TABLE TEST(u_id int, u_name varchar(20))

Insert 5000 筆資料

DECLARE @count int
DECLARE @i int
SET @count = 5000
SET @i = 1

WHILE @i <= @count
BEGIN
	INSERT INTO TEST
	VALUES(1,'test')
	SET @i=@i+1
END

開始分批進行 update

假設我們想要 update 這5000 筆的 u_id 都變成 2,但希望分批update,一次只update 500 筆就好,且每完成500筆就等2秒。

DECLARE @count int
SET @count = 500

WHILE 1=1
BEGIN
	UPDATE top (@count) TEST
	SET u_id =2
	WHERE u_id =1
	
	IF @@ROWCOUNT < @count
	BEGIN 
		BREAK;
	END

	WAITFOR DELAY '00:00:02';
END

小結

透過這樣的方式可以降低該張 TABLE 被鎖住的時間,另外透過等待的那2秒,讓SQL Server可以完成因update 鎖住的其他工作。