不同数据库服务器之间的数据传递
方法一:
1.select top 1000* from opendatasource('SQLOLEDB','Data Source=数据库服务器的IP地址;User ID=账号; Password=密码').数据库名称.dbo.数据表
例子:select top 1000* from opendatasource('SQLOLEDB','Data Source=59.188.1.140;User ID=sa; Password=led123456').Pgenius.dbo.NEWS_MAIN
执行如果报错,
原因:在从远程服务器复制数据到本地时出现“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息 ”错误
执行以下代码:
启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
关闭Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
方法二:
2.
--1.0 创建远程连接的数据库链接,即别名
EXEC sp_addlinkedserver 'ServerA', '', 'SQLOLEDB', '服务器所在IP地址'
EXEC sp_addlinkedsrvlogin 'ServerA', 'false', null, 'sa', 'sa账户的密码'
如:
EXEC sp_addlinkedserver 'ServerA', '', 'SQLOLEDB', '127.1.0.1'
EXEC sp_addlinkedsrvlogin 'ServerA', 'false', null, 'sa', '123'
--2.0 执行查询语句
2.0.1:直接查询
select top 1* from [ServerA].[数据库名称].[dbo].[数据表名称]
2.0.2:连表查询
select top 1* from [ServerA].[Yao].[dbo].[NEWS_MAIN] as m inner join [ServerA].[Yao].[dbo].[NEWS_CONTENT] as c on m.ID=c.ID
2.0.3:采集数据
--如果表A和表B的结构相同,则
INSERT INTO TableB SELECT * FROM ServerA.DatabaseA.dbo.TableA
--如果表A和表B的结构部分相同,则
INSERT INTO TableB (需要复制的列名,以逗号隔开) SELECT 需要复制的列表,以逗号隔开 FROM ServerA.DatabaseA.dbo.TableA