SQLserver的分布式查询:如果一个项目需要二至多台服务器,而我们又必须从几台服务器中将数据取出来,这就必须用分布式查询!sql server远程有个服务器,本地有个服务器,如何把远程服务器中的表数据复制到本地服务器中地表数据,首先2个数据库要能互相访问,在本地数据库用 select * into 新表 from opendatasource('SQLOLEDB','Data Source=远程数据库IP;User ID=用户名; Password=密码').远程数据库名称.dbo.远程数据库表 就可以了。在这里有两个概念:本地数据源、远程数据源!
本地数据源指的是单个服务器上的数据而远程数据源指的是另一个SQL实例上的数据。
如何跨服务器取数呢?
一、
如果经常访问或数据量大,建议用链接服务器--创建链接服务器
exec sp_addlinkedserver ''srv_lnk'','''',''SQLOLEDB'',''远程服务器名或ip地址''
exec sp_addlinkedsrvlogin ''srv_lnk'',''false'',null,''用户名'',''密码''go
--查询示例:
select * from srv_lnk.数据库名.dbo.表名
--导入示例:
select * into 表 from srv_lnk.数据库名.dbo.表名go--以后不再使用时删除链接服务器
exec sp_dropserver ''srv_lnk'',''droplogins''
二、
--如果只是临时访问,可以直接用openrowset
--查询示例:
select * from openrowset(''SQLOLEDB'',''sql服务器名'';''用户名'';''密码'',数据库名.dbo.表名)
--导入示例:
select * into 表 from openrowset(''SQLOLEDB'',''sql服务器名'';''用户名'';''密码'',数据库名.dbo.表名)
如何在企业管理器中设置呢?
SQL实例--->安全性--->链接服务器--->右键新建链接服务器常规中输入链接服务器的名字,选其它数据源,选SQLOLEDB,数据源写上,一般写IP地址再选安全性-----》选本地登陆----》模拟打勾用此安全上下文进行,输入用户与密码。
常见问题:1.在建立完链接服务器后,我们进行查询操作例:我们已对DFLD的服务器做了链接,紧接着我们想访问它中PUBS数据库中的Authors表Select * From DFLD.PUBS..Authors经常会出二类问题
1.提示 异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这 些选项,然后重新发出查询。 这种提示是因为没有将ANSI_NULLS与ANSI_WARNINGS打开 SET ANSI_NULLS ON SET ANSI_WARNINGS ON Select * From DFLD.PUBS..Authors--这样就可以了!
2.提示 某机器MSDTC服务不可用 这种提示很简单,只需要将MSDTC服务打开就是了!注:需要双方均打开MSDTC服务,默认不打开。
不同的数据库语法不同(SQL Server和Oracle为例),且复制包括目标表已存在和目标表不存在的情况,分别回答:
SQL Server中,如果目标表存在:
insert into 目标表 select * from 原表;
SQL Server中,,如果目标表不存在:
select * into 目标表 from 原表;
Oracle中,如果目标表存在:
insert into 目标表 select * from 原表;
commit;
Oracle中,如果目标表不存在:
create table 目标表 as select * from 原表;
数据库表间数据复制 在利用数据库开发时,常常会将一些表之间的数据互相导入。当然可以编写程序实现,但是,程序常常需要开发环境,不方便。最方便是利用sql语言直接导入。既方便而修改也简单。以下就是导入的方法。
1。表结构相同的表,且在同一数据库(如,table1,table2)
Sql :insert into table1 select * from table2 (完全复制)
insert into table1 select distinct * from table2(不复制重复纪录)
insert into table1 select top 5 * from table2 (前五条纪录)
2。 不在同一数据库中(如,db1 table1,db2 table2)
sql: insert into db1..table1 select * from db2..table2 (完全复制)
insert into db1..table1 select distinct * from db2table2(不复制重复纪录)
insert into tdb1..able1 select top 5 * from db2table2 (前五条纪录)
3. 表结构不同的表或复制部分纪录(如,dn_user,dn_user2)
a. 建一个新表[DN_UserTemp](在老表dn_user上增加一列)
SQLServer提供了相应的功能来解决这个问题
具体操作是:>在你需要复制到的数据库上点右键->所有任务->导入数据->然后第一步的数据源那里改成你的源数据库->下一步->下一步->下一步->勾上你要复制的表和视图->再一路到底下一步就可以了
企业互联,融合发展;
精品培训,信而收益。
网络科技,创新管理;
服务经纬,始终如一。