sp_addlinkedserver的一些操作

本文介绍如何使用 SQL Server 的 sp_addlinkedserver 和 sp_addlinkedsrvlogin 存储过程创建链接服务器,实现跨服务器数据库间的查询与数据操作。包括创建链接服务器的方法、执行分布式查询、导入数据等示例。

本文从互相网搜索得来,旨在收集整理技术资料,文章版权归属原作者,由此引起的任何版权问题,与本人无关

sp_addlinkedserver的一些操作

创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft® SQL Server™,则可执行远程存储过程。

语法
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]
 

语法
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] 'useself' ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword' ]


[@useself =] 'useself'

决定用于连接到远程服务器的登录名称。useself 的数据类型为 varchar(8),默认设置为 TRUE。true 值指定 SQL Server 验证的登录使用其自己的凭据以连接到 rmtsrvname,而忽略 rmtuser 和 rmtpassword 参数。false 值指定 rmtuser 和 rmtpassword 参数用来连接到特定 locallogin 的 rmtsrvname。如果 rmtuser 和 rmtpassword 也设置为 NULL,则连接链接服务器不需使用任何登录或密码。对于 Windows NT 身份验证登录而言,useself 为 true 则无效,除非 Microsoft Windows NT® 环境支持安全帐户委托,并且,提供程序支持 Windows 身份验证(此时不再需要创建值为 true 的映射,不过创建仍然有效)。

[ @locallogin =] 'locallogin'

本地服务器上的登录。locallogin 的数据类型为 sysname,默认设置为 NULL。NULL 值指定此条目将应用于所有连接到 rmtsrvname 的本地登录。如果值不为 NULL,则 locallogin 可以是一个 SQL Server 登录或 Windows NT 用户。必须授予 Windows NT 用户直接访问 SQL Server 或通过其作为已授予访问权限的组的成员来访问 SQL Server 的权限。  
不同服务器数据库之间的数据操作

--创建链接服务器
exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例
select * from ITSV.数据库名.dbo.表名

--导入示例
select * intofrom ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--
1、openrowset

--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表
select * intofrom openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT   *
FROM   opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from

 

<think>我们正在处理一个关于SQL Server链接服务器的问题。用户报告说在sys.servers中找不到服务器'192.168.1.140',需要验证服务器名称并可能使用sp_addlinkedserver添加。根据引用[1]和[2]中的错误信息,类似的问题是因为在sys.servers中找不到指定的服务器名称,解决方案是验证服务器名称并执行sp_addlinkedserver存储过程来添加链接服务器。步骤:1.首先,验证服务器名称是否正确。确保没有拼写错误,并且服务器确实存在且网络可访问。2.如果确认服务器名称正确,那么需要使用sp_addlinkedserver存储过程添加链接服务器。关于sp_addlinkedserver的基本用法:存储过程sp_addlinkedserver用于创建一个链接服务器,允许SQLServer在分布式查询中引用其他SQLServer或不同的数据源。基本语法:```sqlEXEC sp_addlinkedserver@server= 'server_name',--要创建的链接服务器的名称(这里是'192.168.1.140')@srvproduct= 'product_name', --对于SQLServer,通常为''(空字符串)或'SQLServer'@provider ='provider_name',--提供程序名称,对于SQL Server,使用'SQLNCLI'(SQLServerNative Client)@datasrc= 'data_source'--数据源,即要连接的服务器地址(这里是'192.168.1.140')或实例名```注意:如果目标服务器SQL Server实例,并且使用命名实例,则data_source应该是“服务器名\实例名”。此外,还需要设置登录凭据。使用sp_addlinkedsrvlogin存储过程添加登录映射。示例:假设我们要添加一个到SQLServer的链接服务器服务器地址为'192.168.1.140',使用SQLServer身份验证,登录名为'remote_user',密码为'password'。步骤:1.添加链接服务器:```sqlEXECsp_addlinkedserver@server ='192.168.1.140',@srvproduct ='',@provider ='SQLNCLI',@datasrc= '192.168.1.140'```2.添加登录映射:```sqlEXEC sp_addlinkedsrvlogin@rmtsrvname= '192.168.1.140',@useself= 'FALSE',@rmtuser ='remote_user',@rmtpassword ='password'```注意:@useself设置为'FALSE'表示使用指定的远程登录凭据,而不是当前登录的凭据。3.验证链接服务器:可以通过以下查询检查链接服务器是否添加成功:```sqlSELECT* FROMsys.servers;```4.测试连接:使用一个简单的查询测试,例如:```sqlSELECT*FROM [192.168.1.140].[database_name].[schema].[table]```注意事项: -确保目标服务器允许远程连接,并且防火墙设置允许SQLServer端口(默认1433)的通信。-如果使用命名实例,请确保指定正确的实例名,并且SQLServer Browser服务正在运行(如果需要)。-如果目标服务器不是SQL Server,则需要指定不同的提供程序(如Oracle的'MSDAORA',OLEDB forODBC的'MSDASQL'等)。如果用户遇到权限问题,可能需要检查SQL Server服务的运行账户是否具有足够的权限,或者使用具有足够权限的账户执行上述存储过程。根据引用[2]中的上下文,用户可能在搭建同事的程序模块时遇到此问题,因此还需要确保应用程序使用的连接字符串或配置中指定的服务器名称与添加的链接服务器名称一致。因此,我们将按照上述步骤指导用户解决问题。</think>### SQL Server 添加链接服务器指南 当在 `sys.servers` 中找不到指定服务器(如 `192.168.1.140`)时,需通过 `sp_addlinkedserver` 存储过程添加链接服务器。以下是完整操作步骤: #### 1. **验证服务器信息** - 确认目标服务器 `192.168.1.140` 的 **IP地址/主机名** 是否正确 - 检查目标实例是否为 **命名实例**(格式:`IP\实例名`) - 使用 `ping 192.168.1.140` 测试网络连通性 - 确保目标 SQL Server 已启用 **远程连接**(SQL Server 配置管理器 → 网络配置) #### 2. **添加链接服务器** 使用标准语法添加链接服务器: ```sql EXEC sp_addlinkedserver @server = N'192.168.1.140', -- 链接服务器名称(可自定义) @srvproduct = N'', -- 留空表示 SQL Server @provider = N'SQLNCLI', -- SQL Server Native Client @datasrc = N'192.168.1.140' -- 实际服务器地址/IP ``` **特殊场景处理**: - **命名实例**:`@datasrc = '192.168.1.140\INSTANCE_NAME'` - **非默认端口**:`@datasrc = '192.168.1.140,51433'` #### 3. **配置登录凭据** 添加登录映射(二选一): ```sql -- 方式1:使用当前登录凭据 EXEC sp_addlinkedsrvlogin @rmtsrvname = '192.168.1.140', @useself = 'TRUE' -- 方式2:指定远程凭据 EXEC sp_addlinkedsrvlogin @rmtsrvname = '192.168.1.140', @useself = 'FALSE', @rmtuser = 'remote_user', @rmtpassword = 'password123' ``` #### 4. **验证配置** ```sql -- 检查 sys.servers SELECT * FROM sys.servers WHERE name = '192.168.1.140' -- 测试连接(替换为实际对象) SELECT TOP 1 * FROM [192.168.1.140].[master].[sys].[databases] ``` #### 5. **常见错误处理** - **连接失败**: - 检查防火墙是否开放 **1433端口**(或自定义端口) - 在目标服务器执行:`sp_readerrorlog 0,1,'192.168.1.140'` - **权限不足**: ```sql GRANT ALTER ANY LINKED SERVER TO [当前登录名] ``` - **提供程序未注册**: ```sql EXEC sp_serveroption '192.168.1.140', 'provider', 'SQLNCLI11' ``` > **关键提示**: > 1. 链接服务器名称(`@server`)是本地别名,可与实际地址不同 > 2. 分布式事务需启用 **MSDTC服务**[^1] > 3. 删除链接服务器:`EXEC sp_dropserver '192.168.1.140','droplogins'`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值