2013-04-08 48 views
0

我有一個僱員表有5個記錄,而我正在運行下面的腳本。該腳本的結果是用EmpID 2返回記錄。同時記錄正在被刪除。 這是正確的方法嗎?有人可以請澄清下面的解釋

begin transaction A 
    select * from Employee where EmpID=2 
    begin transaction B 
     delete from Employee where EmpID=2 
    commit transaction B 
commit transaction A 
+1

你想達到什麼目的? – 2013-04-08 07:08:37

+0

據我所知,你不需要事務b。 – Blorgbeard 2013-04-08 07:08:58

回答

2

你可能只是用這個:

DELETE 
FROM employee 
WHERE empId = 2 
OUTPUT DELETED.* 

這將刪除的記錄和輸出它的內容在一個聲明中,原子。

0

如果你想與EmpID = 2選擇該行,這樣你就可以做了一些工作,並確保這種情況不會得到你之前刪除更改,使用更新鎖:

begin transaction A 
    select * from Employee with (updlock) where EmpID=2 
    delete from Employee where EmpID=2 
commit transaction A 

你也可以使用高於read committed的事務隔離級別,最好是serializable