利用資料庫 Stored Procedure 安全的更新資料
在資料庫使用 Transaction 時,最怕的就是資料表被鎖定,導致其它的查詢被迫等待。基於這原因,查詢資料後發現最保險的作法是使用 Stored Procedure 來更新資料,而且只鎖定在單一筆資料。
方法很單純,SQL 語法如下:
CREATE PROCEDURE [dbo].[UpdatePrice]
(
@id nvarchar(500), -- cannot be NULL
@price int
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
update Product WITH (ROWLOCK) set Price = @price
where ProductId = @id waitfor delay '00:00:15';
select Price from Product WITH (UPDLOCK) where ProductId = @id;
COMMIT TRANSACTION
END
delay '00:00:15'
這一行單純只是等待15秒,以便測試其它的查詢是否會因此卡住。
參考資料