我有一个包含 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
我有一个包含 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
你可以使用这个:
DELETE
FROM employee
WHERE empId = 2
OUTPUT DELETED.*
这将删除记录并在一个语句中以原子方式输出其内容。
如果要选择带有 的行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.