嵌套的链接服务器查询怎么实现? B建立存储过程,过程是B查C..A执行B存储过程. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /*不同服务器数据库之间的数据操作*/--创建链接服务器 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 --把本地表导入远程表 以我机器上三个实例做个测试:1,sql2000实例 理解为你的服务器c有库db2,下有表 tb2,sql2005 express 理解为你的服务器 b有库test,下有表 xxx创建链接服务器:EXEC sp_addlinkedserver 'sql2000', '', 'MSDASQL', NULL, NULL, 'DRIVER={SQL Server};SERVER=.;UID=fc;PWD=bd5178;'GO3,有sql2008 express 理解为你的服务器 a有库test, 创建链接服务器:EXEC sp_addlinkedserver 'sql2005', '', 'MSDASQL', NULL, NULL, 'DRIVER={SQL Server};SERVER=.\SqlExpress;UID=sa;PWD=bd5178;'GOsql2005下执行:select * from sql2000.db2.dbo.tb成功.天真的以为sql2005中创建同义词可以解决问题:sql2005下运行:CREATE SYNONYM [dbo].[sq2k_tb] FOR sql2000.db2.dbo.tbselect * from sql2k_tb成功sql2008下运行:select * from sql2005.test.db.sql2k_tb报找不到对象,看来链接服务器是不认同义词表的。再执行:SELECT * FROM OPENQUERY(sql2005,'SELECT * FROM sql2000.db2.dbo.tb')报 sa 登录失败。看来是拿sql2008上建的sql2005链接服务器时的帐户去连sql2k了。这里的安全信息上下文件具体怎么处理的,还没弄明白。没明白的先跳过去,继续测试:切到sql2005实例,建一个sql2000下同名同密码的帐户 fc,bd5178再切到sql2008实例,exec sp_dropserver sql2005重建链接服务器EXEC sp_addlinkedserver 'sql2005', '', 'MSDASQL', NULL, NULL, 'DRIVER={SQL Server};SERVER=.\SqlExpress;UID=fc;PWD=bd5178;'GO再执行:SELECT * FROM OPENQUERY(sql2005,'SELECT * FROM test.dbo.sql2k_tb')成功。没弄明白的,仍需弄明白,找资料中 非常感谢诸位的回复.特别是liangCK和fcuandy的回复,我经过验证都成功了.再次感谢. 求一個排序 日志满了,想再加多一个日志文件。如何加? 从来没有见过这么奇怪的问题 Microsoft OLE DB Provider for SQL Server 错误 '80004005' 100分在线求救!! SqlServer2000升级到SQL05,存储过程执行速度比2000下慢很多。 各位高手:恢复数据库语句怎么写呀?谢谢 SQL2000还原但不需日志(高手请帮忙) 如何得到SQL库中存为BINARY类型图形文件 请教高手:关于ORACLE的ROWNUM<=N问题 SQLServer的数据上传问题. 求教一个复杂的sql语句
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
--把本地表导入远程表
有库db2,下有表 tb2,sql2005 express 理解为你的服务器 b
有库test,下有表 xxx
创建链接服务器:EXEC sp_addlinkedserver
'sql2000',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=.;UID=fc;PWD=bd5178;'
GO3,有sql2008 express 理解为你的服务器 a
有库test, 创建链接服务器:
EXEC sp_addlinkedserver
'sql2005',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=.\SqlExpress;UID=sa;PWD=bd5178;'
GO
sql2005下执行:
select * from sql2000.db2.dbo.tb
成功.天真的以为sql2005中创建同义词可以解决问题:sql2005下运行:
CREATE SYNONYM [dbo].[sq2k_tb] FOR sql2000.db2.dbo.tbselect * from sql2k_tb
成功sql2008下运行:
select * from sql2005.test.db.sql2k_tb
报找不到对象,看来链接服务器是不认同义词表的。再执行:SELECT * FROM OPENQUERY(sql2005,'SELECT * FROM sql2000.db2.dbo.tb')
报 sa 登录失败。看来是拿sql2008上建的sql2005链接服务器时的帐户去连sql2k了。
这里的安全信息上下文件具体怎么处理的,还没弄明白。没明白的先跳过去,继续测试:切到sql2005实例,建一个sql2000下同名同密码的帐户 fc,bd5178再切到sql2008实例,
exec sp_dropserver sql2005重建链接服务器EXEC sp_addlinkedserver
'sql2005',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=.\SqlExpress;UID=fc;PWD=bd5178;'
GO再执行:
SELECT * FROM OPENQUERY(sql2005,'SELECT * FROM test.dbo.sql2k_tb')成功。没弄明白的,仍需弄明白,找资料中