ALTER PROCEDURE st_ExecSQL
(@Ret smallint OUTPUT,
@str1 varchar(600)='*',@str2 varchar(600)='*' ,@str3 varchar(600)='*',
@str4 varchar(600)='*',@str5 varchar(600)='*',@str6 varchar(600)='*')
AS
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRANSACTION
---------------------------------------------------
set @Ret=1
if @str1<> '*' EXEC(@str1)
if @@ERROR<>0 GOTO L_ROLLBACK
----------------------------------------------------
set @Ret=2
if @str2<> '*' EXEC(@str2)
if @@ERROR<>0 GOTO L_ROLLBACK
----------------------------------------------------
set @Ret=3
if @str3<> '*' EXEC(@str3)
if @@ERROR<>0 GOTO L_ROLLBACK
----------------------------------------------------
set @Ret=4
if @str4<> '*' EXEC(@str4)
if @@ERROR<>0 GOTO L_ROLLBACK
----------------------------------------------------
set @Ret=5
if @str5<> '*' EXEC(@str5)
if @@ERROR<>0 GOTO L_ROLLBACK
----------------------------------------------------
set @Ret=10
if @str6<> '*' EXEC(@str6)
if @@ERROR<>0 GOTO L_ROLLBACK
----------------------------------------------------
COMMIT TRANSACTION
set @Ret=0
return(@Ret)
sp_configure remote proc trans 选项控制对本地事务中的远程存储过程调用是否自动使本地事务被提升为由 MS DTC 管理的分布式事务。连接层 SET 选项 REMOTE_PROC_TRANSACTIONS 可用于替代由 sp_configure remote proc trans 建立的服务器默认值。启用本选项后,远程存储过程调用会使一个本地事务提升为分布式事务。创建 MS DTC 事务的连接成为该事务的创建人。COMMIT TRANSACTION 初始化一个 MS DTC 协调的提交。如果启用了 sp_configure remote proc trans 选项,本地事务中的远程存储过程调用将被自动保护,成为分布式事务的一部分,而不需要重写应用程序以便专门使用 BEGIN DISTRIBUTED TRANSACTION 以替代 BEGIN TRANSACTION。
在本地事务中执行一个分布式查询时,如果目标 OLE DB 数据源支持 ItransactionLocal,则该事务被自动提升为分布式事务。如果目标 OLE DB 数据源不支持 ItransactionLocal,则在分布式查询中只允许只读操作。