SQL2005 跨库查询方法

来源:互联网 发布:linux 统计目录行数 编辑:程序博客网 时间:2024/06/06 13:05
OPENDATASOURCE (Transact-SQL)
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 本机客户端 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

连接到数据源时的初始或默认的目录名称。

集成安全性

DBPROP_AUTH_INTEGRATED

SSPI,指定 Windows 身份验证

仅当 DisallowAdhocAccess 注册表选项针对指定的提供程序显式设置为 0,并且启用 Ad Hoc Distributed Queries 高级配置选项时,OPENDATASOURCE 才可用于访问 OLE DB 数据源中的远程数据。如果未设置这些选项,则默认行为不允许即席访问。

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

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

重要提示:Windows 身份验证比 SQL Server 身份验证更加安全。应尽量使用 Windows 身份验证。OPENDATASOURCE 不应该用于连接字符串中的显式密码。

 

 

任何用户都可以执行 OPENDATASOURCE。用于连接到远程服务器的权限由连接字符串确定。

以下示例将创建与服务器 London 上的 SQL Server 实例 Payroll 的即席连接,并查询 AdventureWorks.HumanResources.Employee 表。

SELECT *FROM OPENDATASOURCE('SQLNCLI','Data Source=London/Payroll;Integrated Security=SSPI').AdventureWorks.HumanResources.Employee
 
 
sp_addlinkedserver (Transact-SQL)

创建链接服务器。链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询。在使用 sp_addlinkedserver 创建链接服务器后,
可对该服务器运行分布式查询。如果链接服务器定义为 SQL Server 实例,则可执行远程存储过程。
语法

 sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]       [ , [ @provider= ] 'provider_name' ]      [ , [ @datasrc= ] 'data_source' ]       [ , [ @location= ] 'location' ]       [ , [ @provstr= ] 'provider_string' ]       [ , [ @catalog= ] 'catalog' ] 
[ @server = ] 'server'

要创建的链接服务器的名称。server 的数据类型为 sysname,没有默认值。

[ @srvproduct = ] 'product_name'

要添加为链接服务器的 OLE DB 数据源的产品名称。product_name 的数据类型为 nvarchar(128),默认值为 NULL。如果为 SQL Server,则不必指定 provider_namedata_sourcelocationprovider_stringcatalog

[ @provider = ] 'provider_name'

与此数据源对应的 OLE DB 访问接口的唯一编程标识符 (PROGID)。对于当前计算机中安装的指定 OLE DB 访问接口,provider_name 必须唯一。provider_name 的数据类型为 nvarchar(128),默认值为 NULL;但如果忽略 provider_name,则使用 SQLNCLI。SQLNCLI 是 SQL 本机 OLE DB 访问接口。OLE DB 访问接口应以指定的 PROGID 在注册表中注册。

[ @datasrc = ] 'data_source'

由 OLE DB 访问接口解释的数据源的名称。data_source 的数据类型为 nvarchar(4000)data_source 作为 DBPROP_INIT_DATASOURCE 属性传递以初始化 OLE DB 访问接口。

[ @location = ] 'location'

由 OLE DB 访问接口解释的数据库的位置。location 的数据类型为 nvarchar(4000),默认值为 NULL。location 作为 DBPROP_INIT_LOCATION 属性传递以初始化 OLE DB 访问接口。

[ @provstr = ] 'provider_string'

OLE DB 访问接口特定的连接字符串,它可标识唯一的数据源。provider_string 的数据类型为 nvarchar(4000),默认值为 NULL。provstr 或传递给 IDataInitialize 或设置为 DBPROP_INIT_PROVIDERSTRING 属性以初始化 OLE DB 访问接口。

在对 SQL 本机客户端 OLE DB 访问接口创建链接服务器时,可将 SERVER 关键字用作 SERVER=servername/instancename 来指定实例,以指定特定的 SQL Server servername 实例是运行 SQL Server 的计算机的名称,instancename 是用户将连接到的特定 SQL Server 实例的名称。

注意:若要访问镜像数据库,则连接字符串必须包含数据库名称。该名称是数据访问接口启用故障转移尝试所必需的。可以在 @provstr@catalog 参数中指定数据库。此外,连接字符串还可以提供故障转移伙伴名称。有关详细信息,请参阅建立到数据库镜像会话的初始连接。

 

 

[ @catalog = ] 'catalog'

与 OLE DB 访问接口建立连接时所使用的目录。catalog 的数据类型为 sysname,默认值为 NULL。catalog 作为 DBPROP_INIT_CATALOG 属性传递以初始化 OLE DB 访问接口。在针对 SQL Server 实例定义链接服务器时,目录指向链接服务器映射到的默认数据库。

0(成功)或 1(失败)

 

 

 

 

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

语法

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超时值,在该超时值后,连接尝试将失败。用户 IDDBPROP_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
原创粉丝点击