1,用Opendatasource系统函数

详细的用法已经注释在sql代码中了。这个是在sqlserver到sqlserver之间的倒数据。2005,2008,2012应该都是适用的。

  1. --从远程服务器192.168.66.154上查询100条数据,然后导入到dbo.dquestiondata
  2. insert into dbo.dquestiondata
  3. select top 100 * from
  4. opendatasource('sqloledb','data source=192.168.6.154;user id=sa;password=xxxxxx').Answer.dbo.DQuestionData
  5. --opendatasource 是一个系统函数,第一个参数是Provider Name,第二个参数是Oledb链接字符串,
  6. --注意连接字符串里没有指定数据库;数据库名称,Schema,表名在opendatasource函数后面书写。
  7.  
  8. --执行上面的语句会报如下的错,原因是没有开启远程查询支持
  9. --SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries'
  10. --because this component is turned off as part of the security configuration for this server.
  11. --A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure.
  12. --For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online.
  13.  
  14. --解决办法1:在图形界面中,SQL Server 安全配置-->机能的安全配置-->开启远程查询Openrowsetopendatasource的支持
  15.  
  16. --解决办法2:用sp_confing系统存储过程,以命令行的方式开启
  17. --首先必须开启‘show advanced options’高级选项,因为‘Ad Hoc Distributed Queries’属于高级选项
  18. exec sp_configure 'show advanced options' ,1
  19. reconfigure
  20. --下面这步可以省略,不带参数的sp_configure,表示查看所有可用的选项
  21. --记住上面一定要加reconfigure语句,目的是使选项立即生效,不然我们
  22. --还是看不到'Ad Hoc Distributed Queries'高级选项
  23. exec sp_configure
  24. --打开'Ad Hoc Distributed Queries'选项
  25. exec sp_configure 'Ad Hoc Distributed Queries',1
  26. reconfigure
  27.  
  28. --记得用完选项后,关闭这些选项
  29. exec sp_configure 'Ad Hoc Distributed Queries',0
  30. reconfigure
  31. exec sp_configure 'show advanced options',0
  32. reconfigure
  33. --查看一下是不是关闭了
  34. exec sp_configure

2,用openrowset系统函数

  1. --1,Microsoft OLE DB Provider for SQL Server
  2. --注意第二部分链接字符串的写法很是奇怪Serveruserpasswrod是用“;”连接的。
  3. select top 100 * from
  4. openrowset('sqloledb','192.168.6.154';'sa';'xxxxx',Answer.dbo.DQuestionData)
  5.  
  6. --2,ODBC数据源的方式:Microsoft OLE DB Provider for ODBC Drivers
  7. select top 100 * from
  8. openrowset('MSDASQL','DRIVER={SQL Server};SERVER=192.168.6.154;UID=sa;PWD=xxxxx',Answer.dbo.DQuestionData)

上面的两种方法都会用到oledb提供商的名称,下面的这个系统存储过程可以查看oledb提供程序的名称

  1. --用于查看oledb提供者名称
  2. EXEC master..xp_enum_oledb_providers

3,用链接服务器

如果要多次用到远程查询,每次都写那么长的链接字符串有点麻烦。可以考虑重复利用。

用链接服务器可以很好的解决这个问题

  1. -- 创建链接服务器
  2. exec sp_addlinkedserver 'svr_link','','sqloledb','192.168.6.154'
  3. -- 创建登录信息
  4. exec sp_addlinkedsrvlogin 'svr_link','false',null,'sa','xxxx'
  5.  
  6. --查询 格式为:链接服务器.数据库名.架构名.表名
  7. select top 100 * from svr_link.Answer.dbo.DQuestionData
  8.  
  9. -- 删除链接服务器
  10. exec sp_dropserver 'svr_link','droplogins'

需要注意的几点:

1,虽然上面的例子都是从远程服务器select数据到本地,

但我们同样可以将本地的数据导向远程服务器

  1. -- 往远程数据库192.168.6.154Answer数据库的test表插入两条数据
  2. insert into svr_link.Answer.dbo.test
  3. select 1,'zhang' union all
  4. select 2,'wang'

2,有了链接服务器,就可以用openquery系统函数了

  1. --检索数据
  2. select * from
  3. openquery(svr_link,'select * from Answer.dbo.test')
  4. -- 插入数据
  5. insert into openquery(svr_link,'select * from Answer.dbo.test')
  6. select 3,'li'

3,opendatasource和链接服务器都是只返回Server部分,要查询表需要进一步指定数据库,架构和表名。而openrowset和openquery返回的是记录集

sql sever跨数据库复制数据的方法【转】的更多相关文章

  1. sql sever跨数据库复制数据的方法

    1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...

  2. sql server 跨数据库插入数据

    创建服务器的连接,创建好后可以存在服务器上,可以在不同位置重复使用,和系统函数类似 exec sp_addlinkedserver 'RemoteServer', '', 'SQLOLEDB ', ' ...

  3. SQL跨数据库复制表数据

    SQL跨数据库复制表数据   不同服务器数据库之间的数据操作 不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库.. ...

  4. SQL Server跨库复制表数据错误的解决办法

    SQL Server跨库复制表数据的解决办法   跨库复制表数据,有很多种方法,最常见的是写程序来批量导入数据了,但是这种方法并不是最优方法,今天就用到了一个很犀利的方法,可以完美在 Sql Serv ...

  5. SQL Server 跨库复制表方法小笔记

    insert into tableA (column1,column2.....) SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=127. ...

  6. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

  7. php 跨数据库调取数据

    我的这个是thinkphp,我就在 Application -> Common -> Conf -> config.php 文件里面配置数据库的地方,加入了下面这段代码 //'数据库 ...

  8. 【转】通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  9. 如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法

    最近学习了下如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法,虽然MyEclipse中自带了连接数据库的方法,我也尝试了下其他方法,如有不当之处请指 ...

随机推荐

  1. 对魔兽世界、支付宝、Linux三类软件的简单分析

    软工第一次作业: 软件有很多种,如工具类软件.游戏类软件.系统类软件,它们的运行方式也各种各样,如以单机方式运行.以网站方式运行或者以APP方式运行在手机端等,请选取三种软件,分析它们各自的特点. 这 ...

  2. Netsuite > Hierarchy of transactions in Inventory cost calculation

    First in day worksheets + Purchase Transactions (Receipts, Bills, Adjustments, Assembly Builds) + Tr ...

  3. Django 1.10 找不到静态资源解决方法

    测试版本:Django 1.10 问题:Django项目找不到静态资源 解决方法: 1.首先你需要在自己的app下面创建2个目录 static 和  templates 树形结构如下(DjangoPr ...

  4. Sublime Text 3 个人开发习惯

    1.添加author.date到函数注释里面 docblockr插件 a.preferences--package settings--docblockr--settings-user点击打开 b.在 ...

  5. 安装配置dradis

    github:https://github.com/dradis/dradis-ce/blob/master/README.md安装出现错误:== Copying sample files == == ...

  6. C# 只移除最后一个字符

    string str = "|||"; Console.WriteLine(str.Substring(0, str.Length - 1)); Console.WriteLine ...

  7. [原]Linux ssh远程连接断开问题处理办法

    我们在通过远程连接操作Linux server的时候,有可能过一段时间忘记操作,便会发生ssh断开的问题. 而如果是本地的server,比较好办,直连设备kill掉ssh,踢掉无效用户连接,再次链接即 ...

  8. iStylePDF c#集成开发示例

    iStylePDF安装包自带了ActiveX控件,下载安装包安装之后就可以使用,如果没有安装包请到360软件管家或者腾讯软件管家搜索下载.C#的Form中集成ActiveX控件还是非常简单的,选择添加 ...

  9. 用SignalR实现的弹幕功能

    弹幕功能通常用于实时显示当前视频或者文档的评论内容,在上快速飞过的方式呈现,看起来比较酷炫. 这种典型的多用户实时交互的功能,很适合使用SignalR实现,通过SignalR提供后台的服务推送功能,客 ...

  10. python成长之路【第十七篇】:玩转jQuery

    一.jQuery简介 1.1.jQuery是什么 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototy ...