本文主要是介绍环回链接服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
这篇关于环回链接服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!