有人可以澄清以下解释

时间:2013-04-08 07:06:48

标签: sql-server

我有一个包含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

2 个答案:

答案 0 :(得分:2)

你可以使用它:

DELETE
FROM    employee
WHERE   empId = 2
OUTPUT  DELETED.*

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

答案 1 :(得分: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