不同数据库服务器之间的数据传递

方法一:

  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

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2014-12-10 17:10  沉住气埋头苦干  阅读(173)  评论(0编辑  收藏  举报