IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫MSSQL → SQL Server 分布式查詢:OLE DB連接(一)

SQL Server 分布式查詢:OLE DB連接(一)

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

?概述和術(shù)語

在 MicrosoftSQL Server 2000 中,分布式查詢?cè)试SSQL Server用戶訪問基于SQL Server的服務(wù)器以外的數(shù)據(jù)(位于其他運(yùn)行SQL Server的服務(wù)器或是具有OLE DB接口的其他數(shù)據(jù)源中)。OLE DB提供了統(tǒng)一的方式來訪問異類數(shù)據(jù)源中的列表數(shù)據(jù)。

在本文中,分布式查詢是指任何引用了一個(gè)或多個(gè)外部OLE DB數(shù)據(jù)源中表或行集的SELECT、INSERT、UPDATE或DELETE語句。

遠(yuǎn)程表是指存儲(chǔ)于 OLE DB 數(shù)據(jù)源中并且不在執(zhí)行查詢的SQL Server 所在服務(wù)器上的表。一個(gè)分布式查詢可以訪問一個(gè)或多個(gè)遠(yuǎn)程表。

OLE DB提供程序類別

根據(jù)OLE DB提供程序在SQL Server的分布式查詢中的功能,我們將它們劃分為如下類別。根據(jù)定義,它們并非互相排斥;某種提供程序可能屬于一個(gè)或多個(gè)類別:

  • SQL 命令提供程序

  • 索引提供程序

  • 簡(jiǎn)單表提供程序

  • 非SQL 命令提供程序


SQL 命令提供程序

凡是以SQL標(biāo)準(zhǔn)語法(SQL Server 認(rèn)可)支持 Command對(duì)象的提供程序,都屬于此類別。下面是 OLE DB 提供程序被SQL Server 視為SQL 命令提供程序的必要條件:

  • 提供程序必須支持 Command 對(duì)象及其所有強(qiáng)制 OLE DB 接口:ICommand、ICommandText、IColumnsInfo、ICommandPropertiesIAccessor。

  • 提供程序支持的SQL 語法必須至少是SQL 子集。提供程序必須通過 DBPROP_SQLSUPPORT 屬性來報(bào)告語法。


SQL 命令提供程序的示例為:Microsoft OLE DB Provider forSQL Server 和 Microsoft OLE DB Provider for ODBC。

索引提供程序

索引提供程序支持并提供與OLE DB對(duì)應(yīng)的索引,同時(shí)還允許基于索引對(duì)基本表執(zhí)行查找。下面是 OLE DB 提供程序被SQL Server 視為索引提供程序的必要條件:

  • 提供程序必須以 TABLES、COLUMNS 和 INDEXES 架構(gòu)行集支持 IDBSchemaRowset 接口。

  • 提供程序必須支持通過 IOpenRowset 打開索引中的行集(通過指定索引名和相應(yīng)的基本表名稱)。

  • Index 對(duì)象必須支持其所有的強(qiáng)制接口:IRowset、IRowsetIndexIAccessor、IColumnsInfo、IRowsetInfoIConvertTypes。

  • 對(duì)帶索引基本表打開的行集(通過使用 IOpenRowset)必須支持 IRowsetLocate 接口,以便根據(jù)書簽在行上定位。


如果一個(gè)OLE DB提供程序滿足以上條件,用戶可以設(shè)置提供程序選項(xiàng) Index As Access Path,以允許SQL Server 使用提供程序的索引來執(zhí)行查詢。默認(rèn)情況下,除非該選項(xiàng)已被設(shè)置,否則SQL Server 不會(huì)嘗試使用提供程序的索引。

注意:SQL Server支持多個(gè)影響SQL Server訪問OLE DB提供程序的方法的選項(xiàng)。可以使用SQL Server 企業(yè)管理器中的"鏈接服務(wù)器屬性"對(duì)話框來設(shè)置這些選項(xiàng)。

簡(jiǎn)單表提供程序

簡(jiǎn)單表提供程序通過IOpenRowset接口來表現(xiàn)根據(jù)基本表打開行集的方式。這些提供程序既不是SQL 命令提供程序也不是索引提供程序;而是SQL Server 分布式查詢所能處理的提供程序中最簡(jiǎn)單的一類。

對(duì)于此類提供程序,SQL Server 僅能在分布式查詢運(yùn)行過程執(zhí)行表掃描操作。

非SQL 命令提供程序

該類提供程序支持 Command對(duì)象及其所有強(qiáng)制接口,但不支持SQL Server 認(rèn)可的SQL 標(biāo)準(zhǔn)語法。

非SQL 命令提供程序的兩個(gè)示例是: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ì)信息,請(qǐng)查閱本文后面的INSERT語句。

  • 如果提供程序滿足 OLE DB 接口在特定表上的要求,UPDATE 和 DELETE 語句也可以用于遠(yuǎn)程表。有關(guān)更新或刪除遠(yuǎn)程表時(shí) OLE DB 接口必須滿足的要求和條件,請(qǐng)參閱本文后面的UPDATE和DELETE。


游標(biāo)支持

如果提供程序支持所需的 OLE DB 功能,則分布式查詢支持快照和鍵集兩種游標(biāo)。分布式查詢不支持動(dòng)態(tài)游標(biāo)。用戶請(qǐng)求的分布式查詢的動(dòng)態(tài)游標(biāo)將自動(dòng)降級(jí)為鍵集游標(biāo)。

快照游標(biāo)在游標(biāo)打開時(shí)被寫入,而且結(jié)果集保持不變;對(duì)基本表的更新、插入和刪除操作不會(huì)反映到游標(biāo)中。

鍵集游標(biāo)在游標(biāo)打開時(shí)被寫入,而且結(jié)果集在游標(biāo)的整個(gè)生存期中保持不變。但是,如果更新或刪除基本表中的行,當(dāng)訪問這些行時(shí),能夠在游標(biāo)中看到變化。如果對(duì)基本表的插入操作可能影響游標(biāo)成員,則這種變化則是不可見的。

如果提供程序滿足更新和刪除遠(yuǎn)程表的條件,則可以通過使用分布式查詢中定義的游標(biāo)以及對(duì)遠(yuǎn)程表的引用來更新和刪除遠(yuǎn)程表,例如:table UPDATE | DELETE <遠(yuǎn)程表> WHERE CURRENT OF <游標(biāo)名稱>。有關(guān)詳細(xì)信息,請(qǐng)參閱本文后面的UPDATE和DELETE 語句。

支持鍵集游標(biāo)的要求

如果滿足所有 Transact-SQL 語法的條件,而且滿足以下兩種情況之一,那么在分布式查詢中就支持鍵集游標(biāo):

  • 在查詢中,OLE DB 提供程序支持所有遠(yuǎn)程表上的可重用書簽。可重用書簽可以從給定表的某個(gè)行集中隱去,然后用于同一表中的其他行集上。對(duì)可重用書簽的支持是通過 IDBSchemaRowset 的 TABLES_INFO 架構(gòu)行集來指定的,方法是將 BOOKMARK_DURABILITY 列設(shè)置為 BMK_DURABILITY_INTRANSACTION 或某種更高的持久性。

  • 所有的遠(yuǎn)程表都通過 IDBSchemaRowset 接口的 INDEXES 行集來列出唯一鍵。應(yīng)該存在一個(gè)索引項(xià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)的條件:

  • 如果提供程序也滿足對(duì)遠(yuǎn)程表進(jìn)行更新和刪除操作的條件,就允許使用可更新游標(biāo)。有關(guān)詳細(xì)信息,請(qǐng)參閱本文后面的UPDATE 和 DELETE 語句。

  • 所有的可更新鍵集游標(biāo)操作必須位于使用可復(fù)讀或更高的隔離級(jí)別的用戶定義事務(wù)中。此外,提供程序必須以 ITransactionJoin 接口支持分布式事務(wù)處理。


OLE DB 提供程序交互階段

所有分布式查詢的執(zhí)行方案都有六種操作:

  • 建立連接和檢索屬性操作,指定SQL Server 連接 OLE DB 提供程序的方法以及將用到提供程序的哪些屬性。

  • 表名解析和檢索元數(shù)據(jù)操作,指定SQL Server 將遠(yuǎn)程表名稱(指定時(shí)使用兩種方法之一:基于鏈接服務(wù)器的名稱或特殊名稱)解析為提供程序中相應(yīng)數(shù)據(jù)對(duì)象的方法。這也包括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ù)時(shí)SQL Server 處理 OLE DB 數(shù)據(jù)類型的方法。

  • 錯(cuò)誤處理操作,指定SQL Server 使用從提供程序獲得的擴(kuò)展錯(cuò)誤信息的方

    關(guān)鍵詞標(biāo)簽:連接,查詢,提供,程序,

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 淺談JSP JDBC來連接SQL Server 2005的方法 淺談JSP JDBC來連接SQL Server 2005的方法 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表損壞的解決方法 sql server系統(tǒng)表損壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫用戶、角色、架構(gòu)的關(guān)系

相關(guān)下載

    人氣排行 配置和注冊(cè)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降級(jí)到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法