如何在SQL SERVER跨服务器查询数据库

作者&投稿:辟胥 (若有异议请与网页底部的电邮联系)
sql数据库中跨不同数据库服务器的查询~

--SQL Server跨服务器查询--创建链接服务器(连接的保密要自己想办法解决啦!)exec sp_addlinkedserver 'LKSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址' exec sp_addlinkedsrvlogin 'LKSV', 'false ',null, '用户名', '密码'--查询实例select * from LKSV.数据库名.dbo.表名

  假定您现在拥有一个以Microsoft.NET为架构的网络订购系统,但是品管维护系统却仍然使用一套旧式的Oracle数据库应用程序。当您的顾客在产品保固期间下了产品更换之类的订单,则该笔订单将不收取任何费用。此时您需要从Oracle数据库得到实时的查询结果。借着建立连结服务器的方式(linkedServer),您将可以从SQLServer实时查询出位于Oracle数据库的顾客资料,找出谁是您既有的客户。
当您的资料分散在不同的SQLServer数据库时,藉由连结服务器可让您执行跨服务器之分布式查询。当所有的数据库服务器都是SQLServer,则连结服务器的设定十分容易,而且在SQLServer线上手册中就涵盖了您所需要了解的所有事项。然而,当部分资料是放在Oracle数据库服务器的时候,这就可能带给您许多挑战。举例来说,光是设定连结服务器就不是一件容易的事。您必须了解到:即是您要在SQLServer的EnterpriseManager设定一个Oracle连结服务器,这台SQLServer对Oracle来说就是一个客户端。所以您必须在SQLServer所在的服务器成功地安装并组态Oracle之客户端软件。因为Oracle提供的产品只支持Oracle8以后的数据库,所以我假设您正在使用的都是Oracle8以后的数据库。在OracleNet8函式库则提供了SQLServer所需要的客户端软件。
设定连接服务器时是利用Microsoft所提供的OLEDB ProviderforOracle,使用的Oracle网络函式库为SQL*Net2.3.3.0.4或是以后的版本,不过这是Oracle7.3数据库所提供的。换句话说,要设定Oracle数据库为SQLServer的连接服务器时,Oracle数据库只要是7.3.3.4以后的版本,并搭配适当的SQL*Net或是Net8函式库即可。
在Oracle数据库中,一个schema即代表着SQLServer专家们所熟知的单一数据库(译者注2)。连接至Oracle数据库时,您必须提供schema名称、密码以及主机联机字符串(hoststring)。每一个特定的Oracle帐户都拥有一个Oracleschema,而且只能有一个schema。所以schema名称其实就等于该schema拥有者的帐户名称。您可以查询Oracle的资料字典(Datadictionary)以得到更多有关schema的内容。
至于Oracle联机字符串又可称为服务名称(servicename)或是系统识别资料(SystenIdentifier,SID)。我们所谓的SQLServer数据库个体(instance)在Oracle则称为数据库(database)。所以安装OracleServer时,安装程序OracleUniversalInstaller(为一个图形接口之安装程序,与SQLServer的Setup程序类似)将会询问您SID名称为何,以作为Oracle数据库之名称。
这个部分原作者所提到schema的解释有点问题。Oracleschema可视为同一个使用者所拥有的所有数据库对象(schemaobjects)之集合。举例来说,使用者scott所建立的EMPtable其完整名称为SCOTT.EMP,而SCOTT就是EMP的schema名称。所以schemaname其实就是一个Oracle数据库之使用者帐号。但是绝对不能拿来跟数据库相提并论!因为SQLServer的数据库架构包含了datafiles与logfiles,但是Oracle的schemaobjects只存在于tablespace中。为了避免部分读者产生混淆,特此说明。
  

--创建链接服务器

exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '

exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例

select * from ITSV.数据库名.dbo.表名

--导入示例

select * into 表 from ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器

exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)

--1、openrowset

--查询示例

select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表

select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表

insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

select *from 本地表

--更新本地表

update b

set b.列A=a.列A

from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b

on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器

exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '

--查询

select *

FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

--把本地表导入远程表

insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')

select * from 本地表

--更新本地表

update b

set b.列B=a.列B

FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a

inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset

SELECT *

FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta

--把本地表导入远程表

insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名

select * from 本地表

创建链接服务器,
之后就可以直接使用,例如:
select from 链接服务器名.odb.[database].[table]

用OPENDATASOURCE
下面是个跨SQLServer查询的示例
Select TableA.*,TableB.* From OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerA;User ID=UserID;Password=Password'
).databaseAName.dbo.TableA
Left Join
OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerB;User ID=UserID;Password=Password'
).databaseBName.dbo.TableB On TableA.key=TableB.key

下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

select *from OPENDATASOURCE('SQLOLEDB','Data Source=伺服器名称;User ID=sa;Password=sa) .资料库名称.dbo.表名查询


新密市17244835764: sql server 怎么访问另一个服务器 -
禤庆呋喃: 访问另一个SQL SERVER服务器 : 1. 开放TCP网络协议 2. 防火墙开放1433端口访问 3. SQL server 建立登录账号SQL Server 就可以通过IP和账户去访问这台SQL SERVER服务器了

新密市17244835764: 如何实现两个sqlserver服务器之间互相访问 -
禤庆呋喃: 1、链接服务器,此种方式较为安全.验证是数据库级别的验证. 2、使用域环境+足够权限的SQL用户权限,就可以访问. 3、使用证书验证(非域环境),配置较以上两种方式复杂.

新密市17244835764: 如何在SQL SERVER跨服务器查询数据库 -
禤庆呋喃: 用OPENDATASOURCE 下面是个跨SQLServer查询的示例 Select TableA.*,TableB.* From OPENDATASOURCE( 'SQLOLEDB', 'Data Source=ServerA;User ID=UserID;Password=Password' ).databaseAName.dbo.TableA Left Join...

新密市17244835764: 两个SQL Server2008数据库如何实现跨局域网、跨服务器的数据同步? -
禤庆呋喃: 楼主好,想实现这个的话,可以使用SQL自带的VS开发工具,做一copy个ETL包,然后部署发布到服务器数据库上,添加作业,设定同步时间即可.跨局域网和跨服务器基本2113上在SQL连接中,本身就不太好解决,需要有服务器之间的链接访问权才可以建立连接.但是ETL不受这一点限制.唯一不足的地方在于,如果你有100张表5261数据需要同步,做ETL包是个麻烦事,同一个模式,你要做非常多的ETL流程,不管是做在一个包中也好,多个包中也好,都会显得比4102较繁琐.但是好处是不受服务器限制,1653另外要注意,如果同步的表有外键,那么需要在做ETL的时候添加执行顺序,才能确保表数据同步成功的.如果想了解更多可加我,646443736

新密市17244835764: 如果已经在一台机器上安装了SQL Server服务器,想从另外一台机器上访问它,应当怎么办? -
禤庆呋喃: 可以从客户端访问.前提:已经安装了客户端.直接点选database engine,输入实例名和帐号密码即可访问该服务器,并管理它.此完全是界面化操作 同时也可通过编写程序来访问 具体就是在你编写的程序中向连接函数传递相关的服务器资讯,即服务器类型,实例名,登入讯息.即可通过特定的物件和函数访问数据库.

新密市17244835764: 如何迁移完整SQL数据库到另外一台服务器 -
禤庆呋喃: 如何迁移完整SQL数据库到另外一台服务器 首先,打开服务器上已经安装好的SQL Server 2005 服务器,并且用本地Windows身份登录.2 打开SQL Server服务器以后,点击数据库--选择附加 3 打开附加数据库界面后,点击右小角的添加 4 打开电脑上,之前备份好的完成数据库文件,然后点击确认. 5 数据库文件和其数据库日志文件,就一并加载过来了,点击确认就可以了. 6 展开数据库,就可以了看到我 们刚刚附加过来的完整数据库了,现在就可以

新密市17244835764: sql server中如何实现在异地访问数据库 -
禤庆呋喃: 首先要确定:你的SQL server是否在内网,是否有对外网服务的端口,防火墙是否允许了端口服务. 以上条件具备了,使用 ip,端口模式,例:192.168.1.111,1402,就可以访问到了.另外,若你是想SQL Server 使用远程的数据库文件或其他服务器,则需要网络文件系统支持,或远程服务器支持.

新密市17244835764: 一台电脑如何连接另外一台电脑的Sql服务器 -
禤庆呋喃: 如果能ping通对方的ip,那么再telnet ip 1433端口,看看有没有反映. 像其他大部分商业关系型数据库管理系统一样(例如IBM DB2、Oracle、[nformix)是结构化的查询语言(SQL).这种语言由于制造商的不同有一些小小的差别,但是语言的...

新密市17244835764: sql server数据库如何设置跨服务器的触发器 -
禤庆呋喃: 在A服务器表中建触发器,一、用openrowset连接B服务器,远程查询SQL或插入数据 二、创建数据库链,exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'

新密市17244835764: 如何将其他sql server服务器的数据库复制到其他服务器上 -
禤庆呋喃: 一、第一步:sql添加服务器 首先,我们需要用sql 脚本连接上另外一个服务器,[sql] view plain copy use master go /*添加服务器*/ EXEC sp_addlinkedserver @server = 'hang', /*此名字可以随便取*/ @srvproduct = 'SQL', @provider = '...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网