在SQL Server 2008中,我知道没有嵌套事务这样的东西。这些似乎只存在。我也知道一些专家强烈恳求开发人员不要使用可用的伪嵌套事务。例如,here。
但是,我有一个案例需要在特定的嵌套过程中对一行进行XLOCK,但仅限于该过程的持续时间。它必须是那个锁,我显然想尽快放下锁。在伪代码中:
...outer procedure
BEGIN TRAN Inner
EXEC InnerProcedure
...InnerProcedure...
BEGIN TRAN Inner
SELECT ... WITH (XLOCK, ROWLOCK)
COMMIT TRAN Inner
-- NEVER rollback here; get the outer procedure to do this
...End InnerProcedure...
COMMIT TRAN Outer
我的问题是:
答案 0 :(得分:4)
没有。不要使用'嵌套'事务(即使在TSQL中)。充其量,它们无法按您的想法运作:A SQL Server DBA myth a day: (26/30) nested transactions are real (False)
XLOCK将在外部事务范围内发布。 [更新:包括Remus的建议]