0

我有一个包含 5 条记录的 Employee 表,并且我正在运行以下脚本。脚本的结果是返回 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
4

2 回答 2

2

你可以使用这个:

DELETE
FROM    employee
WHERE   empId = 2
OUTPUT  DELETED.*

这将删除记录并在一个语句中以原子方式输出其内容。

于 2013-04-08T07:14:58.537 回答
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.

于 2013-04-08T07:20:10.583 回答