管理事务 (XMLA)

发送到 Microsoft 实例的每个 XML for Analysis (XMLA SQL Server SQL Server Analysis Services) 命令在当前隐式或显式会话的事务上下文中运行。 若要管理其中每个事务,请使用 BeginTransactionCommitTransactionRollbackTransaction 命令。 通过使用这些命令,可创建隐式或显式事务,更改事务引用计数以及启动、提交或回滚事务。

隐式和显式事务

事务可以是隐式的或显式的:

隐式事务
如果 BeginTransaction 命令未指定事务的开始,则SQL Server Analysis Services为 XMLA 命令创建隐式事务。 如果命令成功,SQL Server Analysis Services始终提交隐式事务,并在命令失败时回滚隐式事务。

显式事务
如果 BeginTransaction 命令启动事务,则SQL Server Analysis Services创建显式事务。 但是,SQL Server Analysis Services仅在发送 CommitTransaction 命令时提交显式事务,并在发送 RollbackTransaction 命令时回滚显式事务。

此外,如果当前会话在活动事务完成之前结束,则SQL Server Analysis Services回退隐式事务和显式事务。

事务和引用计数

SQL Server Analysis Services为每个会话维护事务引用计数。 但是,SQL Server Analysis Services不支持嵌套事务,即每个会话只维护一个活动事务。 如果当前会话没有活动事务,则事务引用计数将设置为零。

换句话说,每个 BeginTransaction 命令将引用计数递增一个,而每个 CommitTransaction 命令将引用计数递减一个。 如果 CommitTransaction 命令将事务计数设置为零,SQL Server Analysis Services提交事务。

但是, RollbackTransaction 命令将回滚活动事务,而不考虑事务引用计数的当前值。 换句话说,无论发送了多少 BeginTransaction 命令或 CommitTransaction 命令,单个 RollbackTransaction 命令都会回滚活动事务,并将事务引用计数设置为零。

开始事务

BeginTransaction 命令在当前会话上开始显式事务,并将当前会话的事务引用计数递增一个。 所有后续命令都被视为在活动事务中,直到发送足够的 CommitTransaction 命令以提交活动事务或发送单个 RollbackTransaction 命令以回滚活动事务为止。

提交事务

CommitTransaction 命令提交在当前会话上运行 BeginTransaction 命令后运行的命令的结果。 每个 CommitTransaction 命令递减会话上活动事务的引用计数。 如果 CommitTransaction 命令将引用计数设置为零,SQL Server Analysis Services提交活动事务。 如果没有活动事务 (,则当前会话的事务引用计数已设置为零) , CommitTransaction 命令将导致错误。

回滚事务

RollbackTransaction 命令回滚在当前会话上运行 BeginTransaction 命令后运行的命令的结果。 无论当前事务引用计数如何, RollbackTransaction 命令都会回滚活动事务,并将事务引用计数设置为零。 如果没有活动事务 (,则当前会话的事务引用计数已设置为零) , RollbackTransaction 命令将导致错误。

另请参阅

在 Analysis Services 中使用 XMLA 开发