环回链接服务器

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



posted on 2013-01-03 15:24  中國風  阅读(121)  评论(0编辑  收藏  举报