我用下面的代码:Begin Tran每次都需要一个新名字吗?
--begin tran redist1
/*--FIRST Update
update db..tablename set column=value
where complexthing = othercomplexthing
*/
/*--SECOND Update
update db..tablename set column=replace(column,'A','1')
*/
select * from db..tablename
--rollback tran redist1
--commit tran redist1
我强调“的begin tran redist1”,开船,强调的第一大更新语句,并运行它,然后做与SELECT语句相同。它起作用了,所以我突出显示了“commit tran redist1”。
接下来我突出显示“begin tran redist1”,运行它,突出显示SECOND更新语句并运行它,然后对select语句执行相同的操作。它没有工作,所以我突出了“rollback tran redist1”。
接下来我突出显示“begin tran redist1”,运行它,突出显示SECOND更新语句并运行它,然后对select语句执行相同的操作。它这次工作,所以我突出显示“commit tran redist1”。
我用了几个更新语句,每次都重复这个过程。然后,我打开了一个“编辑”窗口,在我最后一次“提交”之后直接更改值,但SQL服务器仅为该窗口保持超时,并说我的“commit tran redist1”是阻塞事务,尽管已完成。我再次运行提交,并打开编辑窗口,显示数据,因为我改变了它。
今天早上,我再次打开了编辑窗口,并且在我运行FIRST查询+提交后,表格又回到了某种程度。所有后来的查询+提交都丢失了。但是,我在编辑窗口中手动编辑的记录仍然被编辑。
请注意,每次我使用名称“redist1”,以每次事务的适当提交或回滚结束。我的问题是,是否重用名称是我问题的原因?名称的重用会造成某种类型的冲突吗?
+1,我不认为我曾经使用过一个命名事务。我一直都在失败时回滚一切。 –
我对提交/回滚非常有条不紊,所以我肯定你所描述的意外嵌套没有发生。我测试后立即承诺或回滚,以确保我没有失去任何东西。每个说“成功完成”。 – Merennulli
@Merennulli - 可能。从您的描述中可能发现人为错误。 – Oded