如果有多個 SQL 語法要執行,需要確保每一個都成功,不然就要還原執行結果,可以使用「交易(Transaction)」來輕鬆達成。
標記開始 Transaction:
開始執行 Transaction 後,之後所有的操作都會被納入到同一個 Transaction 中,直到提交(Commit) 或是復原(Rollback)。
確認 Transaction:
復原 Transaction:
假設要將 Users 和 Employee 兩張資料表的資料都更新,並且要確保兩個都更新成功,則在開始執行更新語法前可以先標記開始 Transaction:
執行更新語法 1:
執行更新語法 2:
兩個都更新成功後就執行 Commit ,將 Transaction 的內容實際更新到資料庫中:
在還沒 Commit 前,我們可以隨時執行 Rollback ,取消剛剛的動作,讓我們執行的變更不要真正的進入到資料庫中:
參考資料:
Microsoft.Learn - Transactions (Transact-SQL)
Microsoft.Learn - BEGIN TRANSACTION (Transact-SQL)
標記開始 Transaction:
BEGIN TRANSACTION;
開始執行 Transaction 後,之後所有的操作都會被納入到同一個 Transaction 中,直到提交(Commit) 或是復原(Rollback)。
確認 Transaction:
COMMIT TRANSACTION;
復原 Transaction:
ROLLBACK TRANSACTION;
範例
剛看完語法可能會覺得有點模糊,這裡來示範一次。假設要將 Users 和 Employee 兩張資料表的資料都更新,並且要確保兩個都更新成功,則在開始執行更新語法前可以先標記開始 Transaction:
BEGIN TRANSACTION;
執行更新語法 1:
update Users set DisplayName = 'ruyut' where Id = 1;
執行更新語法 2:
update Employee set DisplayName = 'ruyut' where Id = 1;
兩個都更新成功後就執行 Commit ,將 Transaction 的內容實際更新到資料庫中:
COMMIT TRANSACTION;
在還沒 Commit 前,我們可以隨時執行 Rollback ,取消剛剛的動作,讓我們執行的變更不要真正的進入到資料庫中:
ROLLBACK TRANSACTION;
參考資料:
Microsoft.Learn - Transactions (Transact-SQL)
Microsoft.Learn - BEGIN TRANSACTION (Transact-SQL)
感謝教學~
回覆刪除