sp_addlinkedserver的一些操作

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 * into 表 from ITSV.数据库名.dbo.表名 

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

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

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

--生成本地表 
select * into 表 from 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
在 SQL Server 环境中,`sys.servers` 表通常用于存储已连接的数据库服务器的信息,包括服务器名、登录账户等。如果你遇到提示说找不到特定的服务器 `8.137.13.136`,这可能是以下几个原因: 1. **拼写错误**:确认输入的服务器名称 `8.137.13.136` 是否完全正确,特别是大小写敏感的部分。 2. **服务器未连接**:这个地址可能表示的是一个尚未通过 `sp_addlinkedserver` 存储过程链接到当前系统的物理服务器。你需要通过管理员权限运行该存储过程来建立链接。 3. **权限限制**:检查当前用户是否有足够的权限去查看或管理其他服务器。 4. **系统更新或配置更改**:如果服务器已经从系统中移除或者网络配置有变,可能会导致查询不到。 针对这个问题,你可以尝试以下操作: 1. 使用 `sp_helpsrvr '8.137.13.136'` 来直接验证服务器是否存在。 2. 如果不存在,执行 `sp_addlinkedserver` 存储过程,传入服务器的名称、提供者(如 OLE DB 或者 SQL Server Native Client)、数据库名称和其他必要的连接信息。 3. 执行完存储过程后,再次查询 `sys.servers`,看新添加的服务器是否已列出。 ```sql EXEC sp_addlinkedserver 'MyServer', @srvproduct = 'SQL Server', @provider = 'SQLNCLI', @datasrc = '8.137.13.136,mydatabase'; ``` 其中,`@srvproduct` 是你想链接的服务器类型,`@provider` 是数据源使用的连接提供者,`@datasrc` 包含了服务器地址和数据库名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值