SQLServer 跨库查询实现方法
程序员文章站
2023-12-14 09:59:46
本文给出一条 sql 语句用于展示在同一名服务器上,不同的数据库间查询,注意当前连接用户要对两个库都有权限sql server 中 sql 语句中对象的完整表达式是: [d...
本文给出一条 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 参数中最常用的关键字。
注释
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
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