SQL Server 创建链接服务器

本文介绍如何在SQLServer 2005及更高版本中创建链接服务器,并提供了详细的步骤与注意事项。包括不同版本间的对比、创建过程中的配置调整、以及如何通过SQL脚本生成和使用这些链接。
部署运行你感兴趣的模型镜像
原文地址为: SQL Server 创建链接服务器

适用场景:对远程的DB进行操作。

20002005对比:SQL Server 2000版本中也有链接远程DBSQL,但是功能比较弱,扩展性差,支持的查询比较简单。而SQL Server 2005版本的SSMS中已经有了 服务器对象->链接服务器 的功能点,用户首先创建一个远程DB的链接对象,之后就可以像本地表一样执行表的DML了。

创建步骤:SQL Server 2005版本打开SSMS,服务器对象->链接服务器->右击 新建链接服务器,在图2中是一种设置方式,也有其它的设置方式,比如:[图解]sqlserver中创建链接服务器,图3是安全性选项中设置远程数据库的账号和密码。

 

(图1:新建链接) 

 

(图2:设置链接) 

 

(图3:设置帐号) 

 

注意事项: MSSQL2005Rpc的默认设置如图4所示, 需要把它设置为图5, 右键点击远程链接->属性->服务器选项->RpcRpc Out,这两个值需要设置为True

 

(图4: 默认设置) 

 

(图5: 正确设置) 

但在MSSQL2008下不能直接修改链接服务器 'ETV2_LINK' RPC配置成TURE,可以通过语句修改如下:

USE   [ master ]
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' rpc ' @optvalue = N ' true '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' rpc out ' @optvalue = N ' true '
GO

 

生成脚本:如果已经通过操作界面生成了 'ETV2_LINK' 的链接服务器,那么我们如果需要把它移植到其它数据库(部署、更新)的时候,就可以通过下面的方法来生产SQL脚本,你也可以通过修改SQL脚本来快速新建或修改链接服务器,比如修改@server链接服务器名称,修改@datasrc远程链接的数据库对象。

 

(图6: 生成SQL脚本) 

 

SQL Server 2005生成远程链接对象的SQL脚本:

/* ***** 对象:  LinkedServer [ETV2_LINK]    脚本日期: 09/08/2010 17:36:11 ***** */
EXEC  master.dbo.sp_addlinkedserver  @server   =  N ' ETV2_LINK ' @srvproduct = N ' ETV2_LINK ' @provider = N ' SQLNCLI ' @datasrc = N ' BWA035\BWA035_2K5 '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' collation compatible ' @optvalue = N ' false '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' data access ' @optvalue = N ' true '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' dist ' @optvalue = N ' false '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' pub ' @optvalue = N ' false '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' rpc ' @optvalue = N ' true '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' rpc out ' @optvalue = N ' true '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' sub ' @optvalue = N ' false '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' connect timeout ' @optvalue = N ' 0 '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' collation name ' @optvalue = null
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' lazy schema validation ' @optvalue = N ' false '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' query timeout ' @optvalue = N ' 0 '
GO
EXEC  master.dbo.sp_serveroption  @server = N ' ETV2_LINK ' @optname = N ' use remote collation ' @optvalue = N ' true '

 

使用假设已经创建了名为ETV2_LINK的远程链接对象,那么你就可以像下面的方式来使用这个对象操作远程DB

使用场景1查询ETV2_LINK这个远程链接对象的[etV2_Online]数据库中VisiteLog_20100629表的数据。模板形如:Select * From [链接服务器名].[远程数据库名].[所有者].[表名]

-- 查询远程DB表TableName
select   *   from  ETV2_LINK. [ etV2_Online ] .dbo.VisiteLog_20100629

 

使用场景2判断ETV2_LINK这个远程链接对象的[etV2_Online]数据库中是否存在名为VisiteLog_20100629的表。

-- 注意:是sys.objects不是sysobjects
--
判断远程用户是否存在某张表
IF   EXISTS  ( SELECT   *   FROM  ETV2_LINK. [ etV2_Online ] .sys.objects  WHERE  name  =  N ' VisiteLog_20100629 '   AND  type  in  (N ' U ' ))
BEGIN
    
-- 逻辑处理
     print   ' 存在表 '
END

 

使用场景3判断远程DB[etV2_Online]数据库中是否存在名为VisiteLog_20100629的表。只不过这个表名是参数化的,可以通过传入的参数进行判断。这里只是简单的设置变量的值并使用OUT来返回变量。 

-- 判断远程用户是否存在某张表(参数化表名),返回变量
DECLARE   @IsExistTable   VARCHAR ( 10 )
DECLARE   @Tablename   VARCHAR ( 50 )
DECLARE   @sqlString   NVARCHAR ( 4000 )
SET   @IsExistTable   =   ' False '
SET   @Tablename   =   ' VisiteLog_ ' + convert ( varchar ( 9 ), getdate () - 1 , 112 -- 例如VisiteLog_20100629
SET   @sqlString   =  
' IF EXISTS (SELECT * FROM ETV2_LINK.[etV2_Online].sys.objects WHERE name = N ''' + @Tablename + '''  AND type in (N '' U '' ))
    set @IsExistTableOUT =
'' True '''
EXEC  sp_executesql  @sqlString ,N ' @IsExistTableOUT varchar(10) OUTPUT ' , @IsExistTableOUT = @IsExistTable  OUTPUT

IF  ( @IsExistTable   =   ' True ' ) -- 存在
BEGIN
    
-- 逻辑处理
     print   ' 存在表 '
END

 

补充: SQL Server 2000版本连接远程服务器的SQL脚本,更多相关脚步可以参考:在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery) 

-- 方法1:
select   *    from   openrowset ( ' SQLOLEDB ' , ' server=192.168.0.67;uid=sa;pwd=password ' , ' SELECT * FROM BCM2.dbo.tbAppl ' )

-- 方法2:
select   *    from   openrowset ( ' SQLOLEDB ' , ' 192.168.0.67 ' ; ' sa ' ; ' password ' , ' SELECT * FROM BCM2.dbo.tbAppl '

 


转载请注明本文地址: SQL Server 创建链接服务器

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

SQL Server 创建连接服务器链接服务器)有以下几种方法: ### 使用 SQL Server Management Studio 图形界面创建 1. 打开 Microsoft SQL Server Management Studio。 2. 打开服务器对象 -> 右键链接服务器 -> 点击新建链接服务器。 3. 在常规选项卡中,输入一个自定义的别名,在数据源选项输入需要链接的数据库地址和端口号。 4. 在安全性选项卡中,选择(使用此安全上下文建立连接)然后输入链接数据库的登录账号和密码。 5. 在服务器选项中设置自己需要的,点击确定。 6. 进行测试 [^3]。 ### 使用 SQL 语句创建 #### 示例 1:在当前数据库(假设为 follow_up)中创建一个链接服务器连接 ```sql -- 创建链接服务器 EXEC sp_addlinkedserver @server = 'CloudantDBServer', -- 连接服务器的名称(自定义) @srvproduct = '', -- 产品名称,可以为空 @provider = 'MSDASQL', -- 提供程序,通常使用 SQL Native Client @datasrc = 'CloudantDB_v3'; -- 本机数据库的数据源名称(数据库名) -- 创建登录映射 EXEC sp_addlinkedsrvlogin @rmtsrvname = 'CloudantDBServer', -- 引用要链接服务器名称,同上,名称需要一样 @useself = 'false', @locallogin = null, -- 本地 SQL Server 登录用户名 @rmtuser = 'CloudantDB_username', -- 被链接数据库的用户名 @rmtpassword = 'CloudantDB_password'; -- 被链接数据库的密码 ``` [^1] #### 示例 2:创建 MySQL 链接服务器 ```sql -- 创建链接服务器 EXEC sp_addlinkedserver @server = 'MySQL_Linked', @srvproduct = 'MySQL', @provider = 'MSDASQL', @datasrc = 'MySQL_DSN'; -- ODBC 数据源名称 -- 验证链接服务器 -- 查询远程表 SELECT * FROM RemoteSQL.AdventureWorks2019.dbo.Employees; -- 执行远程存储过程 EXEC RemoteSQL.master.dbo.sp_helpdb; ``` [^2] #### 示例 3: ```sql -- 创建链接服务器 EXEC master.dbo.sp_addlinkedserver @server = N'TEST', @srvproduct=N'TEST', @provider=N'SQLNCLI', @datasrc=N'127.147.157.17,1433' -- 创建登录映射 /* For security reasons the linked server remote logins password is changed with ######## */ EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'TEST', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='########' ``` [^3] ### 针对 Oracle 数据库创建链接服务器的特殊步骤 安装完成之后,会出现 OraOLEDB.Oracle 这个访问接口,接口的属性里有一些设置选项,酌情勾选,建议勾选“允许进程内”。在系统环境变量中,为 Path 添加“C:\oracleOLEDB;C:\oracleOLEDB\bin;”(计算机属性 - 高级系统设置 - 高级 - 环境变量 - 系统环境变量 - Path),如果之前安装过 instant client,需要删除其路径,否则在 SQL Server 管理工具创建链接服务器时会卡死。如果是供外部应用程序访问,还需要配置 TNS_ADMIN 和 NLS_LANG 环境变量。由于 OLEDB 驱动支持 EZCONNECT,所以不配置 tnsnames.ora 也是可以的,使用 IP:端口号/实例名即可创建链接服务器 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值