概述和術語 在 MicrosoftSQL Server 2000 中,分布式查詢允許SQL Server用戶訪問基於SQL Server的服務器以外的數據(位於其他運行SQL Server的服務器或是具有OLE DB接口的其他數據源中)。OLE DB提供了統一的方式來訪問異類數據源中的列表數據。
在本文中,分布式查詢是指任何引用了一個或多個外部OLE DB數據源中表或行集的SELECT、INSERT、UPDATE或DELETE語句。
遠程表是指存儲於 OLE DB 數據源中並且不在執行查詢的SQL Server 所在服務器上的表。一個分布式查詢可以訪問一個或多個遠程表。
OLE DB提供程序類別 根據OLE DB提供程序在SQL Server的分布式查詢中的功能,我們將它們劃分為如下類別。根據定義,它們並非互相排斥;某種提供程序可能屬於一個或多個類別:
SQL 命令提供程序
索引提供程序
簡單表提供程序
非SQL 命令提供程序
SQL 命令提供程序
凡是以SQL標准語法(SQL Server 認可)支持 Command對象的提供程序,都屬於此類別。下面是 OLE DB 提供程序被SQL Server 視為SQL 命令提供程序的必要條件:
提供程序必須支持 Command 對象及其所有強制 OLE DB 接口:ICommand、ICommandText、IColumnsInfo、ICommandPropertIEs 和 IAccessor。
提供程序支持的SQL 語法必須至少是SQL 子集。提供程序必須通過 DBPROP_SQLSUPPORT 屬性來報告語法。
SQL 命令提供程序的示例為:Microsoft OLE DB Provider forSQL Server 和 Microsoft OLE DB Provider for ODBC。
索引提供程序 索引提供程序支持並提供與OLE DB對應的索引,同時還允許基於索引對基本表執行查找。下面是 OLE DB 提供程序被SQL Server 視為索引提供程序的必要條件:
提供程序必須以 TABLES、COLUMNS 和 INDEXES 架構行集支持 IDBSchemaRowset 接口。
提供程序必須支持通過 IOpenRowset 打開索引中的行集(通過指定索引名和相應的基本表名稱)。
Index 對象必須支持其所有的強制接口:IRowset、IRowsetIndex、IAccessor、IColumnsInfo、IRowsetInfo 和 IConvertTypes。
對帶索引基本表打開的行集(通過使用 IOpenRowset)必須支持 IRowsetLocate 接口,以便根據書簽在行上定位。
如果一個OLE DB提供程序滿足以上條件,用戶可以設置提供程序選項 Index As Access Path,以允許SQL Server 使用提供程序的索引來執行查詢。默認情況下,除非該選項已被設置,否則SQL Server 不會嘗試使用提供程序的索引。
注意:SQL Server支持多個影響SQL Server訪問OLE DB提供程序的方法的選項。可以使用SQL Server 企業管理器中的“鏈接服務器屬性”對話框來設置這些選項。
簡單表提供程序 簡單表提供程序通過IOpenRowset接口來表現根據基本表打開行集的方式。這些提供程序既不是SQL 命令提供程序也不是索引提供程序;而是SQL Server 分布式查詢所能處理的提供程序中最簡單的一類。
對於此類提供程序,SQL Server 僅能在分布式查詢運行過程執行表掃描操作。
非SQL 命令提供程序 該類提供程序支持 Command對象及其所有強制接口,但不支持SQL Server 認可的SQL 標准語法。
非SQL 命令提供程序的兩個示例是:Microsoft OLE DB Provider for Indexing Service 和 Microsoft Windows NT®Active Directory™Service Interfaces (ADSI) OLE DB Provider。
Transact-SQL 子集 如果提供程序支持所需的 OLE DB 接口,下列 Transact-SQL 語句類別都可以用於分布式查詢。