SQL远程连接

第一种方式:使用 OPENDATASOURCE 进行连接:

语法:

OPENDATASOURCE ( provider_name, init_string )

参数:

provider_name

注册为用于访问数据源的 OLE DB 访问接口的 PROGID 的名称。provider_name 的数据类型为 char,无默认值。

 

init_string

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

 

注意:

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

配制 Ad Hoc Distributed Queries 的方法:

SP_CONFIGURE 'show advanced options',1

GO

RECONFIGURE

GO

-- 为开启为关闭

SP_CONFIGURE 'Ad Hoc Distributed Queries',1

GO

RECONFIGURE

GO

SP_CONFIGURE 'show advanced options',0

GO

RECONFIGURE

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

 

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

 

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

 

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

 

例:

SELECT *

FROM OPENDATASOURCE

(

    'SQLOLEDB',

    'Data Source=192.168.1.43;User ID=sa;Password=sa'

).databasename.dbo.tablename

    如果是Windows身份认证登陆,则可以使用Integrated Security=SSPI安全验证登陆。

第二种方法:使用 SP_ADDLINKEDSERVER 进行连接:

    语法:

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_name、data_source、location、provider_string 和 catalog。

  • [ @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 实例的名称。

 

  • [ @catalog = ] 'catalog'

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

下表显示为能通过 OLE DB 访问数据源而建立链接服务器的方法。对于特定的数据源,可以使用多种方法为其设置链接服务器;该表中可能有多行适用于一种数据源类型。该表还显示了用于设置链接服务器的 sp_addlinkedserver 参数值。

远程 OLE DB 数据源

OLE DB 访问接口

product_name

provider_name

data_source

location

provider_string

目录

SQL Server 

Microsoft SQL 本机客户端 OLE DB 访问接口

SQL Server 1(默认值)

  

  

  

  

  

SQL Server 

Microsoft SQL 本机客户端 OLE DB 访问接口

  

SQLNCLI

SQL Server 的网络名称(用于默认实例)

  

  

数据库名称(可选)

SQL Server 

Microsoft SQL 本机客户端 OLE DB 访问接口

  

SQLNCLI

servername\instancename(用于特定实例)

  

  

数据库名称(可选)

Oracle

Microsoft OLE DB Provider for Oracle

任何2

MSDAORA

用于 Oracle 数据库的 SQL*Net 别名

  

  

  

Oracle,版本 8 及更高版本

Oracle Provider for OLE DB

任何

OraOLEDB.Oracle

用于 Oracle 数据库的别名

  

  

  

Access/Jet

Microsoft OLE DB Provider for Jet

任何

Microsoft.Jet.OLEDB.4.0

Jet 数据库文件的完整路径

  

  

  

ODBC 数据源 (ODBC data source)

Microsoft OLE DB Provider for ODBC

任何

MSDASQL

ODBC 数据源的系统 DSN

  

  

  

ODBC 数据源 (ODBC data source)

Microsoft OLE DB Provider for ODBC

任何

MSDASQL

  

  

ODBC 连接字符串

  

文件系统

Microsoft OLE DB Provider for Indexing Service

任何

MSIDXS

索引服务目录名称

  

  

  

Microsoft Excel 电子表格

Microsoft OLE DB Provider for Jet

任何

Microsoft.Jet.OLEDB.4.0

Excel 文件的完整路径

  

Excel 5.0

  

IBM DB2 数据库

Microsoft OLE DB Provider for DB2

任何

DB2OLEDB

  

  

请参阅 Microsoft OLE DB Provider for DB2 文档。

DB2 数据库的目录名称

同样在进行连接时需要开启 Ad Hoc Distributed Queries。

例:

EXEC SP_ADDLINKEDSERVER

    @server = '别名',

    @srvproduct = '',

    @provider = SQLOLEDB,

    @datasrc = NULL,

    @location = NULL,

    @provstr = 'DRIVER={SQL Server};SERVER=192.168.1.43;UID=sa;PWD=sa;',

    @catalog = NULL

    然后需要设置登陆名连接:

    EXEC SP_ADDLINKEDSRVLOGIN

    @rmtsrvname='别名',

    @useself='false',

    -- 这个是本地的登陆名

    @locallogin='sa',

    @rmtuser='sa',

    @rmtpassword='sa'

    注意:在使用这种方法时,需要使用SQL用户名登陆才可以,比如sa用户。

posted on 2007-03-17 18:43  Sherrys  阅读(2680)  评论(2编辑  收藏  举报

导航