环回链接服务器
USE [master] GO --查看测试环境 SELECT @@SERVERNAME,@@VERSION /* Roy-PC Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) */ --创建链接服务器ROY_LNK EXEC master.dbo.sp_addlinkedserver @server = N'ROY_LNK', @srvproduct=N'ROY_LNK', @provider=N'SQLOLEDB', @datasrc=N'XXX.XXX.X.XXX'--也可用SQLNCLI\SQLOLEDB EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'ROY_LNK', @locallogin = NULL , @useself = N'False', @rmtuser = N'sa', @rmtpassword = N'wuxi' GO USE Test GO IF OBJECT_ID('T') IS NULL SELECT 1 AS ID INTO T go SELECT go IF OBJECT_ID('P1','P') IS NOT NULL DROP PROCEDURE P1 go CREATE PROCEDURE P1 AS SELECT * FROM [ROY_LNK].test.dbo.T go IF OBJECT_ID('P2','P') IS NOT NULL DROP PROCEDURE P2 GO CREATE PROCEDURE P2 AS SET XACT_ABORT ON; BEGIN TRAN EXEC [ROY_LNK].test.dbo.P1 COMMIT TRAN GO --第1次运行出现 exec P2 --提示以下错误时 /* 消息 7411,级别 16,状态 1,过程 P2,第 5 行 未将服务器 'ROY_LNK' 配置为用于 RPC。 */ --开启RPC EXEC master.dbo.sp_serveroption @server=N'ROY_LNK', @optname=N'rpc out', @optvalue=N'true' GO --第2次运行(环回链接服务器) exec P2 /* 消息 3910,级别 16,状态 2,第 1 行 其他会话正在使用事务的上下文。 */ --解决方法 GO ALTER PROCEDURE P1 AS SELECT * FROM test.dbo.T GO exec P2 /* ID 1 */
DROP PROC p1,p2 DROP TABLE T