SQL Server Native Client OLE DB 访问接口

Microsoft SQL Server Native Client OLE DB 访问接口提供了用于访问 Microsoft SQL Server 数据库的 OLE DB 接口。通过使用 SQL Server Native Client OLE DB 访问接口,SQL Server 分布式查询可以查询 SQL Server 远程实例中的数据。

创建用以访问 SQL Server 数据库的链接服务器

  • 执行 sp_addlinkedserver 以创建链接服务器,指定将 SQL Server 远程实例作为 data_source 来运行的服务器的网络名称。对于 SQL Server 链接服务器,指定访问接口 (SQLNCLI) 的操作是可选的。(使用 SQLNCLI 并且 SQL Server 将重定向到 SQL Server Native Client OLE DB 访问接口的最新版本。)

    例如,若要创建一个名为 LinkSQLSrvr 的链接服务器,以便对运行于网络名称为 NetSQLSrvr 的服务器上的 SQL Server 实例进行操作,请执行下列操作之一:

    sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLNCLI', N'NetSQLSrvr'
    sp_addlinkedserver N'LinkSQLSrvr', ' ', ' ', N'NetSQLSrvr'
    

    另外,也可以根据其网络名称来定义 SQL Server 链接服务器,如下例所示:

    sp_addlinkedserver N'NetSQLSrvr'
    

对运行 SQL Server 2000 实例的服务器执行分布式查询时,建议应用 SQL Server 2000 Service Pack 4 (SP4)。如果尚未应用 SP4,则应运行 SP4 附带的 Instcat.sql 脚本以升级目录存储过程。

对运行 SQL Server 7.0 或更早版本的服务器执行分布式查询时,必须升级早期版本的目录存储过程,以确保分布式查询可以正常运行。例如,如果服务器运行的是 SQL Server 7.0 实例,则该服务器上的目录存储过程必须升级至 SQL Server 2008 才能引用运行 SQL Server 2008 实例的服务器中的分布式查询。

更新远程 SQL Server 表时,本地服务器或客户端将不会收到此更新所激发的触发器产生的任何结果集或消息。

使用四部分名称时,需始终指定架构名称。没有在分布式查询中指定架构名称将禁止 OLE DB 查找表。引用本地表时,如果未指定所有者姓名,SQL Server 将使用默认值。即使链接服务器登录已映射到链接服务器上的 AdventureWorks2008R2 数据库中的 dbo 用户,下列 SELECT 语句仍将生成 7314 号错误:

sp_addlinkedserver @server = N'LinkServer',
    @srvproduct = N' ',
    @provider = N'SQLNCLI', 
    @datasrc = N'ServerNetName', 
    @catalog = N'AdventureWorks2008R2'
GO
SELECT *
FROM LinkServer.AdventureWorks2008R2.dbo.Vendor

以下示例定义了访问同一台计算机(其网络名称为 othersite)的链接服务器和远程服务器。链接服务器定义使用与远程服务器的网络名称相同的名称;而远程服务器定义则使用其他名称。

/* Create a linked server definition to othersite. */
EXEC sp_addlinkedserver 'othersite', N'SQL Server'

/* Create a remote server definition using a
   fictitious name. */
EXEC sp_addserver 'RPCothersite'

/* Set the fictitious name to the network name far away. */
EXEC sp_setnetname 'RPCothersite', 'othersite'

然后,就可以在分布式查询或者远程过程调用中引用这两个名称。

/* A distributed query referencing othersite. */
SELECT *
FROM othersite.Northwind.dbo.Employees
/* A remote procedure call to the same server. */
EXEC RPCothersite.master.dbo.sp_who
/* Distributed queries can be used to execute
   stored procedures on the other server. */
EXEC othersite.master.dbo.sp_who

通过链接服务器执行的存储过程和通过远程服务器执行的存储过程之间的登录映射机制不同。有关详细信息,请参阅链接服务器

分布式查询的事务注意事项

Microsoft SQL Server Native Client OLE DB 访问接口不支持嵌套事务。因此,对于涉及多个 Transact-SQL 语句的事务内部的数据修改操作和在分布式分区视图上进行的数据修改操作,XACT_ABORT 都应设置为 ON。