sql sever跨数据库复制数据的方法【转】
1,用Opendatasource系统函数
详细的用法已经注释在sql代码中了。这个是在sqlserver到sqlserver之间的倒数据。2005,2008,2012应该都是适用的。

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

2,用openrowset系统函数

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

上面的两种方法都会用到oledb提供商的名称,下面的这个系统存储过程可以查看oledb提供程序的名称
- --用于查看oledb提供者名称
- EXEC master..xp_enum_oledb_providers
3,用链接服务器
如果要多次用到远程查询,每次都写那么长的链接字符串有点麻烦。可以考虑重复利用。
用链接服务器可以很好的解决这个问题

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

需要注意的几点:
1,虽然上面的例子都是从远程服务器select数据到本地,
但我们同样可以将本地的数据导向远程服务器
- -- 往远程数据库192.168.6.154的Answer数据库的test表插入两条数据
- insert into svr_link.Answer.dbo.test
- select 1,'zhang' union all
- select 2,'wang'
2,有了链接服务器,就可以用openquery系统函数了

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

3,opendatasource和链接服务器都是只返回Server部分,要查询表需要进一步指定数据库,架构和表名。而openrowset和openquery返回的是记录集
sql sever跨数据库复制数据的方法【转】的更多相关文章
- sql sever跨数据库复制数据的方法
1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...
- sql server 跨数据库插入数据
创建服务器的连接,创建好后可以存在服务器上,可以在不同位置重复使用,和系统函数类似 exec sp_addlinkedserver 'RemoteServer', '', 'SQLOLEDB ', ' ...
- SQL跨数据库复制表数据
SQL跨数据库复制表数据 不同服务器数据库之间的数据操作 不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库.. ...
- SQL Server跨库复制表数据错误的解决办法
SQL Server跨库复制表数据的解决办法 跨库复制表数据,有很多种方法,最常见的是写程序来批量导入数据了,但是这种方法并不是最优方法,今天就用到了一个很犀利的方法,可以完美在 Sql Serv ...
- SQL Server 跨库复制表方法小笔记
insert into tableA (column1,column2.....) SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=127. ...
- 通过SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...
- php 跨数据库调取数据
我的这个是thinkphp,我就在 Application -> Common -> Conf -> config.php 文件里面配置数据库的地方,加入了下面这段代码 //'数据库 ...
- 【转】通过SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...
- 如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法
最近学习了下如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法,虽然MyEclipse中自带了连接数据库的方法,我也尝试了下其他方法,如有不当之处请指 ...
随机推荐
- 对魔兽世界、支付宝、Linux三类软件的简单分析
软工第一次作业: 软件有很多种,如工具类软件.游戏类软件.系统类软件,它们的运行方式也各种各样,如以单机方式运行.以网站方式运行或者以APP方式运行在手机端等,请选取三种软件,分析它们各自的特点. 这 ...
- Netsuite > Hierarchy of transactions in Inventory cost calculation
First in day worksheets + Purchase Transactions (Receipts, Bills, Adjustments, Assembly Builds) + Tr ...
- Django 1.10 找不到静态资源解决方法
测试版本:Django 1.10 问题:Django项目找不到静态资源 解决方法: 1.首先你需要在自己的app下面创建2个目录 static 和 templates 树形结构如下(DjangoPr ...
- Sublime Text 3 个人开发习惯
1.添加author.date到函数注释里面 docblockr插件 a.preferences--package settings--docblockr--settings-user点击打开 b.在 ...
- 安装配置dradis
github:https://github.com/dradis/dradis-ce/blob/master/README.md安装出现错误:== Copying sample files == == ...
- C# 只移除最后一个字符
string str = "|||"; Console.WriteLine(str.Substring(0, str.Length - 1)); Console.WriteLine ...
- [原]Linux ssh远程连接断开问题处理办法
我们在通过远程连接操作Linux server的时候,有可能过一段时间忘记操作,便会发生ssh断开的问题. 而如果是本地的server,比较好办,直连设备kill掉ssh,踢掉无效用户连接,再次链接即 ...
- iStylePDF c#集成开发示例
iStylePDF安装包自带了ActiveX控件,下载安装包安装之后就可以使用,如果没有安装包请到360软件管家或者腾讯软件管家搜索下载.C#的Form中集成ActiveX控件还是非常简单的,选择添加 ...
- 用SignalR实现的弹幕功能
弹幕功能通常用于实时显示当前视频或者文档的评论内容,在上快速飞过的方式呈现,看起来比较酷炫. 这种典型的多用户实时交互的功能,很适合使用SignalR实现,通过SignalR提供后台的服务推送功能,客 ...
- python成长之路【第十七篇】:玩转jQuery
一.jQuery简介 1.1.jQuery是什么 jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototy ...