您當(dāng)前所在位置:
首頁 →
數(shù)據(jù)庫 →
MSSQL →
SQL Server 分布式查詢:OLE DB連接(一)
SQL Server 分布式查詢:OLE DB連接(一)
時間:2015-06-28 00:00:00
來源:IT貓撲網(wǎng)
作者:網(wǎng)管聯(lián)盟
我要評論(0)
? | 概述和術(shù)語
在 MicrosoftSQL Server 2000 中,分布式查詢允許SQL Server用戶訪問基于SQL Server的服務(wù)器以外的數(shù)據(jù)(位于其他運行SQL Server的服務(wù)器或是具有OLE DB接口的其他數(shù)據(jù)源中)。OLE DB提供了統(tǒng)一的方式來訪問異類數(shù)據(jù)源中的列表數(shù)據(jù)。
在本文中,分布式查詢是指任何引用了一個或多個外部OLE DB數(shù)據(jù)源中表或行集的SELECT、INSERT、UPDATE或DELETE語句。
遠(yuǎn)程表是指存儲于 OLE DB 數(shù)據(jù)源中并且不在執(zhí)行查詢的SQL Server 所在服務(wù)器上的表。一個分布式查詢可以訪問一個或多個遠(yuǎn)程表。
OLE DB提供程序類別
根據(jù)OLE DB提供程序在SQL Server的分布式查詢中的功能,我們將它們劃分為如下類別。根據(jù)定義,它們并非互相排斥;某種提供程序可能屬于一個或多個類別:
- SQL 命令提供程序
- 索引提供程序
- 簡單表提供程序
- 非SQL 命令提供程序
SQL 命令提供程序
凡是以SQL標(biāo)準(zhǔn)語法(SQL Server 認(rèn)可)支持 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對應(yīng)的索引,同時還允許基于索引對基本表執(zhí)行查找。下面是 OLE DB 提供程序被SQL Server 視為索引提供程序的必要條件:
- 提供程序必須以 TABLES、COLUMNS 和 INDEXES 架構(gòu)行集支持 IDBSchemaRowset 接口。
- 提供程序必須支持通過 IOpenRowset 打開索引中的行集(通過指定索引名和相應(yīng)的基本表名稱)。
- Index 對象必須支持其所有的強制接口:IRowset、IRowsetIndex、IAccessor、IColumnsInfo、IRowsetInfo 和 IConvertTypes。
- 對帶索引基本表打開的行集(通過使用 IOpenRowset)必須支持 IRowsetLocate 接口,以便根據(jù)書簽在行上定位。
如果一個OLE DB提供程序滿足以上條件,用戶可以設(shè)置提供程序選項 Index As Access Path,以允許SQL Server 使用提供程序的索引來執(zhí)行查詢。默認(rèn)情況下,除非該選項已被設(shè)置,否則SQL Server 不會嘗試使用提供程序的索引。
注意:SQL Server支持多個影響SQL Server訪問OLE DB提供程序的方法的選項??梢允褂肧QL Server 企業(yè)管理器中的"鏈接服務(wù)器屬性"對話框來設(shè)置這些選項。
簡單表提供程序
簡單表提供程序通過IOpenRowset接口來表現(xiàn)根據(jù)基本表打開行集的方式。這些提供程序既不是SQL 命令提供程序也不是索引提供程序;而是SQL Server 分布式查詢所能處理的提供程序中最簡單的一類。
對于此類提供程序,SQL Server 僅能在分布式查詢運行過程執(zhí)行表掃描操作。
非SQL 命令提供程序
該類提供程序支持 Command對象及其所有強制接口,但不支持SQL Server 認(rèn)可的SQL 標(biāo)準(zhǔn)語法。
非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 語句類別都可以用于分布式查詢。
- 除了將遠(yuǎn)程表作為目的表的 SELECT INTO 語句外,其他所有的 SELECT 語句都可以使用。
- 如果提供程序支持插入操作所需的接口,INSERT 語句可以用于遠(yuǎn)程表。有關(guān) INSERT 語句的 OLE DB 要求的詳細(xì)信息,請查閱本文后面的INSERT語句。
- 如果提供程序滿足 OLE DB 接口在特定表上的要求,UPDATE 和 DELETE 語句也可以用于遠(yuǎn)程表。有關(guān)更新或刪除遠(yuǎn)程表時 OLE DB 接口必須滿足的要求和條件,請參閱本文后面的UPDATE和DELETE。
游標(biāo)支持
如果提供程序支持所需的 OLE DB 功能,則分布式查詢支持快照和鍵集兩種游標(biāo)。分布式查詢不支持動態(tài)游標(biāo)。用戶請求的分布式查詢的動態(tài)游標(biāo)將自動降級為鍵集游標(biāo)。
快照游標(biāo)在游標(biāo)打開時被寫入,而且結(jié)果集保持不變;對基本表的更新、插入和刪除操作不會反映到游標(biāo)中。
鍵集游標(biāo)在游標(biāo)打開時被寫入,而且結(jié)果集在游標(biāo)的整個生存期中保持不變。但是,如果更新或刪除基本表中的行,當(dāng)訪問這些行時,能夠在游標(biāo)中看到變化。如果對基本表的插入操作可能影響游標(biāo)成員,則這種變化則是不可見的。
如果提供程序滿足更新和刪除遠(yuǎn)程表的條件,則可以通過使用分布式查詢中定義的游標(biāo)以及對遠(yuǎn)程表的引用來更新和刪除遠(yuǎn)程表,例如:table UPDATE | DELETE <遠(yuǎn)程表> WHERE CURRENT OF <游標(biāo)名稱>。有關(guān)詳細(xì)信息,請參閱本文后面的UPDATE和DELETE 語句。
支持鍵集游標(biāo)的要求
如果滿足所有 Transact-SQL 語法的條件,而且滿足以下兩種情況之一,那么在分布式查詢中就支持鍵集游標(biāo):
- 在查詢中,OLE DB 提供程序支持所有遠(yuǎn)程表上的可重用書簽??芍赜脮灴梢詮慕o定表的某個行集中隱去,然后用于同一表中的其他行集上。對可重用書簽的支持是通過 IDBSchemaRowset 的 TABLES_INFO 架構(gòu)行集來指定的,方法是將 BOOKMARK_DURABILITY 列設(shè)置為 BMK_DURABILITY_INTRANSACTION 或某種更高的持久性。
- 所有的遠(yuǎn)程表都通過 IDBSchemaRowset 接口的 INDEXES 行集來列出唯一鍵。應(yīng)該存在一個索引項,其中的 UNIQUE 列設(shè)置為 VARIANT_TRUE。
包含OpenQuery 函數(shù)的分布式查詢不支持鍵集游標(biāo)。
支持可更新鍵集游標(biāo)的要求
通過在分布式查詢上定義的鍵集游標(biāo),可以更新或刪除遠(yuǎn)程表,例如:UPDATE | DELETE< 遠(yuǎn)程表>WHERE CURRENT OF <游標(biāo)名稱>。下面是在分布式查詢中允許使用可更新游標(biāo)的條件:
- 如果提供程序也滿足對遠(yuǎn)程表進(jìn)行更新和刪除操作的條件,就允許使用可更新游標(biāo)。有關(guān)詳細(xì)信息,請參閱本文后面的UPDATE 和 DELETE 語句。
- 所有的可更新鍵集游標(biāo)操作必須位于使用可復(fù)讀或更高的隔離級別的用戶定義事務(wù)中。此外,提供程序必須以 ITransactionJoin 接口支持分布式事務(wù)處理。
OLE DB 提供程序交互階段
所有分布式查詢的執(zhí)行方案都有六種操作:
- 建立連接和檢索屬性操作,指定SQL Server 連接 OLE DB 提供程序的方法以及將用到提供程序的哪些屬性。
- 表名解析和檢索元數(shù)據(jù)操作,指定SQL Server 將遠(yuǎn)程表名稱(指定時使用兩種方法之一:基于鏈接服務(wù)器的名稱或特殊名稱)解析為提供程序中相應(yīng)數(shù)據(jù)對象的方法。這也包括SQL Server 為編譯和優(yōu)化分布式查詢從提供程序檢索的表元數(shù)據(jù)。
- 事務(wù)管理操作,指定所有與 OLE DB 提供程序的事務(wù)相關(guān)的交互。
- 數(shù)據(jù)類型處理操作,該操作指定在執(zhí)行分布式查詢過程中,當(dāng)SQL Server從OLE DB提供程序獲得數(shù)據(jù)或向其導(dǎo)出數(shù)據(jù)時SQL Server 處理 OLE DB 數(shù)據(jù)類型的方法。
- 錯誤處理操作,指定SQL Server 使用從提供程序獲得的擴(kuò)展錯誤信息的方
關(guān)鍵詞標(biāo)簽:連接,查詢,提供,程序,
相關(guān)閱讀
熱門文章
淺談JSP JDBC來連接SQL Server 2005的方法
SqlServer2005對現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟
sql server系統(tǒng)表損壞的解決方法
MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系
人氣排行
配置和注冊O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程
如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫
SQL2000數(shù)據(jù)庫遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù)
SQL2000和SQL2005數(shù)據(jù)庫服務(wù)端口查看或修改
修改Sql Server唯一約束教程
SQL Server 2005降級到2000的正確操作步驟
sql server系統(tǒng)表損壞的解決方法
淺談JSP JDBC來連接SQL Server 2005的方法