if not exists(select * from sys.sysservers where srvname='server_lnk')
begin
exec sp_addlinkedserver 'server_lnk', '', 'SQLOLEDB', '192.168.1.15'
exec sp_addlinkedsrvlogin 'server_lnk', 'false ',null, 'sa', '123'
end
set xact_abort ON
BEGIN DISTRIBUTED TRANSACTION tans1 --开始分布式事务
INSERT INTO dbo.stuscore([name])VALUES('abc')
if(@@error<>0)
ROLLBACK TRANSACTION tans1
INSERT INTO server_lnk.Test.dbo.t1([name])
VALUES('12345678901234567890123456789012345678901234567890')
select @@error
IF(@@error<>0)
ROLLBACK TRANSACTION tans1
COMMIT TRANSACTION tans1
GO
--这个是没问题的,加上BEGIN DISTRIBUTED TRANSACTION就报错
select * from server_lnk.Test.dbo.t1
--错误信息
链接服务器"server_lnk"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "没有活动事务。"。
消息 7391,级别 16,状态 2,第 7 行
无法执行该操作,因为链接服务器 "server_lnk" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。