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跨数据库复制数据的方法的更多相关文章

  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. Debian静态IP地址和DNS

    Debian静态IP地址和DNS 一.配置文件及路径 /etc/network/interfaces 二.IP地址1. DHCP的IP配置如下 # The primary network interf ...

  2. Android Studio 环境搭建参考,jdk10javac命令提示不是内部或外部命令

    https://blog.csdn.net/qq_33658730/article/details/78547789 win10下Android Studio和SDK下载.安装和环境变量配置 http ...

  3. LINQ中in的实现方法-LINQ To Entities如何实现查询 select * from tableA where id in (1,2,3,4)

    如果用in是字符串类型无问题,可以直接这样用 ).Where(entity => urls.Contains((entity.NavigateUrl == null ? "" ...

  4. 基于数据库构建分布式的ID生成方案

    在分布式系统中,生成全局唯一ID,有很多种方案,但是在这多种方案中,每种方案都有有缺点,下面我们之针对通过常用数据库来生成分布式ID的方案,其它方法会在其它文中讨论: 1,RDBMS生成ID: 这里我 ...

  5. unity, shader中获得当前像素深度

    frag shader中直接访问i.pos.z就是深度,不必除以i.pos.w,因为系统已经自动进行过了透视除法且已将i.pos.w置为0.

  6. Vue(三):vuex是什么

    vuex官网介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue ...

  7. MySQL5.7.11免安装版的安装和配置:解决MYSQL 服务无法启动问题

    在http://dev.mysql.com/downloads/mysql 这个官网下载MySQL5.7.11 ZIP Archive版本号: watermark/2/text/aHR0cDovL2J ...

  8. vue-webpack快速建立项目模板

  9. 由于出现以下异常,无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull。

    Entity Framework (version 6.0.0.0) and MySQL Server (>= 5.7.11) 在使用EF中,从数据库中更新模型 操作.报错! 解决办法: 1. ...

  10. C++11 explicit的使用

    C++中的explicit关键字只能用于修饰只有一个参数的类构造函数 , 它的作用是表明该构造函数是显示的, 而非隐式的,跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况 ...