SQLServer 跨库查询实现方法

不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分

本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限
SQL Server 中 SQL 语句中对象的完整表达式是:

[DatabaseServer].[DatabaseName].[DatabaseSchema].[DatabaseObject]

本文给出一条 SQL 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限。

复制代码代码如下:

select * 
from CfteaDb1.dbo.CfteaTable1 inner join CfteaDb2.dbo.CfteaTable2 
on CfteaDb1.dbo.CfteaTable1.Id=CfteaDb2.dbo.CfteaTable2.Id

以上在 SQL Server 2008 R2 的 Management Studio 中测试成功。

下面是一些补充资料

不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。

语法 
OPENDATASOURCE ( provider_name, init_string )

参数 
provider_name

注册为用于访问数据源的 OLE DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默认值。

init_string

连接字符串,这些字符串将要传递给目标提供程序的 IDataInitialize 接口。提供程序字符串语法是以关键字值对为基础的,这些关键字值对由分号隔开,例如:"keyword1=value; keyword2=value."

在 Microsoft® Data Access SDK 中定义了基本语法。有关所支持的特定关键字值对的信息,请参见提供程序中的文档。下表列出 init_string 参数中最常用的关键字。

关键字 OLE DB 属性 有效值和描述
数据源 DBPROP_INIT_DATASOURCE 要连接的数据源的名称。不同的提供程序用不同的方法对此进行解释。对于 SQL Server OLE DB 提供程序来说,这会指明服务器的名称。对于 Jet OLE DB 提供程序来说,这会指明 .mdb 文件或 .xls 文件的完整路径。
位置 DBPROP_INIT_LOCATION 要连接的数据库的位置。
扩展属性 DBPROP_INIT_PROVIDERSTRING 提供程序特定的连接字符串。
连接超时 DBPROP_INIT_TIMEOUT 超时值,在该超时值后,连接尝试将失败。
用户 ID DBPROP_AUTH_USERID 用于该连接的用户 ID。
密码 DBPROP_AUTH_PASSWORD 用于该连接的密码。
目录 DBPROP_INIT_CATALOG 连接到数据源时的初始或默认的目录名称。

注释 
OPENDATASOURCE 函数可以在能够使用链接服务器名的相同 Transact-SQL 语法位置中使用。因此,就可以将 OPENDATASOURCE 用作四部分名称的第一部分,该名称指的是 SELECT、INSERT、UPDATE 或 DELETE 语句中的表或视图的名称;或者指的是 EXECUTE 语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE 应该指的是另一个 SQL Server。OPENDATASOURCE 不接受参数变量。

与 OPENROWSET 函数类似,OPENDATASOURCE 应该只引用那些不经常访问的 OLE DB 数据源。对于访问次数稍多的任何数据源,请为它们定义链接的服务器。无论 OPENDATASOURCE 还是 OPENROWSET 都不能提供链接的服务器定义的全部功能,例如,安全管理以及查询目录信息的能力。每次调用 OPENDATASOURCE 时,都必须提供所有的连接信息(包括密码)。

示例 
下面的示例访问来自某个表的数据,该表在 SQL Server 的另一个实例中。

复制代码代码如下:

SELECT * 
FROM OPENDATASOURCE( 
‘SQLOLEDB‘, 
‘Data Source=ServerName;User ID=MyUID;Password=MyPass‘ 
).Northwind.dbo.Categories

下面是个查询的示例,它通过用于 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

http://www.jb51.net/article/30017.htm

时间: 2024-10-08 21:47:39

SQLServer 跨库查询实现方法的相关文章

SqlServer跨库查询

由于业务的拆分,数据库拆分为两种作用: 汇总数据库(Master,头节点数据库), 子节点数据库(Compute Node,计算子节点数据库) 这样,就设计到子节点访问头节点数据库中的某张汇总表,这种表的记录一般在几,到几十万行左右,目前适合做跨库查询. 跨库查询目前分为两种: 通过sp_addlinkedserver建立链接服务器 没有链接服务器时,可以使用openrowset或者opendatasource函数 在部署时,需要在SQLSERVER外围应用配置器中启用OpenRowSet和Op

SQLServer跨库查询--分布式查询[转载]

--用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) --导入示例 select * into 表 from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) --创建链接服务器 exec sp_addlinkedserve

SQLServer跨库查询--分布式查询

出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) 在跨库查询时需要启用Ad Hoc Distributed Queries启用Ad Hoc Distri

oracle使用dblink跨库查询的例子

本文介绍了oracle数据库使用dblink进行跨库查询的方法,oracle dblink跨库查询教程,需要的朋友参考下. oracle dblink跨库查询 方法一:首先,创建数据库链接: 复制代码代码示例: CREATE PUBLIC DATABASE LINK 数据链名称 CONNECT TO 登陆用户名 IDENTIFIED BY 密码 USING '(DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(

Oracle 跨库 查询 复制表数据

在目前绝大部分数据库有分布式查询的需要.下面简单的介绍如何在oracle中配置实现跨库访问. 比如现在有2个数据库服务器,安装了2个数据库.数据库server A和B.现在来实现在A库中访问B的数据库. 第一步.配置A服务器端的tnsnames.ora文件(TNSNAMES.ORA Network Configuration File),该文件存放的位置为: $ORACLE_HOME/network/admin/tnsnames.ora 需要在该文件中增加对B库的配置项,格式如下 ZBCDB3

跨库查询问题.

在本地服务器测试的时候,我使用的是TP框架中的M方法.查询的时候 public function text(){ $mod = M('anta.user','store_'); $info = $mod->where("user_id=127")->select(); var_dump($info);exit; } M方法中M('库名.表名','表前缀'); 是可以查询的. 但是我当我在服务器中进行M方法跨库查询的时候,缺总是报错,显示"boolean false

DBLink 跨库查询

背景 随着业务复杂程度的提高.数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求.与此同时,业务的数据被“散落”在各个数据库实例中.如何方便地对这些数据进行汇总查询,已经成为困扰用户的一大问题. 例如,一家电商创业公司,最初的会员.商品.订单数据全部都存放在一个SQLServer实例中.但随着会员数量和交易规模的不断增长,单个SQLServer实例已经支撑不了巨大的业务压力,同时基于成本考虑,将商品和订单表从原来的SQLServer中

分库分表的几种常见玩法及如何解决跨库查询等问题

在谈论数据库架构和数据库优化的时候,我们经常会听到"分库分表"."分片"."Sharding"-这样的关键词.让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战.让人感到担忧的是,他们系统真的就需要"分库分表"了吗?"分库分表"有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议. 垂直分表 垂直分表在日常开

sql serve 跨服务器查询数据方法

 今天在做sql server 的数据查询时,需要用到跨服务器连接,在这里记录一下,如何在sql server 中,使用跨服务器查询的方法,有以下步骤. /* 创建中间数据库链接 exec sp_addlinkedserver 'MiddleData', ' ', 'SQLOLEDB', '数据库连接实例,或者IP' exec sp_addlinkedsrvlogin 'MiddleData', 'false',null, '数据库连接帐号', '数据库连接密码' */ 创建好连接之后,就可