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

您當前所在位置: 首頁數(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)

用于遠程查詢執(zhí)行的提供程序?qū)傩?/strong>

如果提供程序支持的SQL 功能沒有包含在 DBPROP_SQLSUPPORT 報告的語法級別中,可以通過使用各種提供程序特有的屬性來指出它們。

  • SQLPROP_GROUPBY。該屬性對支持SQL-Minimum 級別的提供程序比較有意義。它指出提供程序在 SELECT 語句中支持 GROUP BY 和 HAVING 子句。另外,它還指出提供程序支持如下五種聚合函數(shù):MIN、MAX、SUM、COUNT 和 AVG。提供程序可能不支持在這些合計函數(shù)參數(shù)中使用 DISTINCT。

  • SQLPROP_SUBQUERIES。該屬性對支持SQL-Minimum 級別的提供程序比較有意義。它指出該提供程序支持SQL-92 entry 級別所規(guī)定的子查詢。包括 SELECT 列表中的子查詢,以及 WHERE 子句中的關系子查詢,IN、EXISTS、ALL 和 ANY 運算符。

  • SQLPROP_DATELITERALS。該屬性對任何提供程序(包括支持SQL-92 entry 級別的提供程序)都比較有意義。對日期時間文字的標準語法的支持不屬于SQL-92 entry 級別。該SQL Server 特有的屬性指出提供程序支持SQL-92 標準所規(guī)定的日期時間文字語法。

  • SQLPROP_ANSILIKE。該屬性對支持SQL-Minimum 級別的提供程序比較有意義。它指出提供程序支持每個SQL-92 entry 級別所規(guī)定的 LIKE 運算符(使用 "%" 和 "_" 作為通配符)。由于SQL-Minimum 級別沒有包括對 LIKE 的支持,所以它對支持SQL-Minimum 級別的提供程序非常有用。

  • SQLPROP_INNERJOIN。該屬性對支持SQL-Minimum 級別的提供程序比較有意義。它指出支持在 FROM 子句中使用多個表。由于SQL-Minimum 級別不支持聯(lián)接,所以它對只支持SQL-Minimum 級別的提供程序非常有用。但是,這并非指出了對顯式 JOIN 關鍵字和 OUT 聯(lián)接的支持。它只指出了支持在 FROM 子句使用多個表的隱含聯(lián)接。

  • SQLPROP_DYNAMICSQL。該屬性指出支持使用 "?" 作為參數(shù)標記。應支持參數(shù)標記在 WHERE 子句或 SELECT 列表中替代一個數(shù)量項目。對 "?" 運算符標記的支持允許SQL Server 向提供程序發(fā)送帶參數(shù)查詢。

  • SQLPROP_NESTEDQUERIES。該屬性指出支持在 FROM 子句中嵌套 SELECT(例如,SELECT * FROM (SELECT * FROM T))。在多種情況下,SQL Server 在生成遠程執(zhí)行的查詢字符串時,在查詢的 FROM 子句中使用嵌套的 SELECT 語句。由于對嵌套 SELECT 的支持并不是SQL-92 entry 級別所必需的,除非提供程序也設置了本屬性,否則SQL Server 不會向提供程序委派帶有嵌套 SELECT 語句的查詢。另外,系統(tǒng)管理員也可以設置提供程序的 Nested Queries 選項,以使SQL Server 生成用于提供程序上的嵌套查詢。



提供程序能夠通過使用名為SQLPROPSET_OPTHINTS 的SQL Server 特殊屬性集來支持這些屬性,并獲得已定義的 PROPID 值。屬性集SQLPROPSET_OPTHINTS 和這兩個屬性通過使用以下常數(shù)來定義:



extern const GUIDSQLPROPSET_OPTHINTS = { 0x2344480c, 0x33a7, 0x11d1, 

{ 0x9b, 0x1a, 0x0, 0x60, 0x8, 0x26, 0x8b, 0x9e } };

enumSQLPROPERTIES {

SQLPROP_NESTEDQUERIES = 0x4,

        SQLPROP_DYNAMICSQL = 0x5,

        SQLPROP_GROUPBY = 0x6,

        SQLPROP_DATELITERALS = 0x7,

        SQLPROP_ANSILIKE = 0x8,

        SQLPROP_INNERJOIN = 0x9,

        SQLPROP_SUBQUERIES = 0x10

   };



隱含的字符集和排序順序

SQL Server 2000支持在列級別上指定字符數(shù)據(jù)的排序。排序包括非 Unicode 字符數(shù)據(jù)(charvarchar 列)的字符集和排序順序規(guī)范。對于Unicode數(shù)據(jù)(ncharnvarchar 列),排序只指定了排序順序。

只有在鏈接服務器使用的字符集(非 Unicode 數(shù)據(jù))、排序順序、字符串比較語法和本地服務器一致時,SQL Server 2000 才將字符串比較操作委派給提供程序。

在鏈接服務器是SQL Server時,SQL Server自動確定排序的兼容性。對于其他提供程序,系統(tǒng)管理員必須為SQL Server 指出給定的鏈接服務器上的字符數(shù)據(jù)的排序方式。在SQL Server 2000中,支持名為Collation Name的新的鏈接服務器選項。如果系統(tǒng)管理員確定鏈接服務器上采用的排序語法和SQL Server 標準語法一致,就能將Collation Name選項設置為排序名。Collation Name選項能夠使用系統(tǒng)存儲過程sp_serveroption 來設置。只有滿足了如下兩個條件時才應該設置該選項:

  • 遠程排序順序和字符集與指定的SQL Server 排序一致。

  • OLE DB 提供程序使用的字符串比較的語法符合SQL-92 標準規(guī)范或等同于SQL Server 的比較語法。



為了向下兼容,仍支持SQL Server 7.0 中的 Collation Compatible 選項。將其設置為true 等于將 Collation Name 選項設置為SQL Server 主數(shù)據(jù)庫的默認排序方式。新的應用程序應使用 Collation Name 選項,而不是 Collation Compatible 選項。

索引訪問

SQL Server 使用提供程序列出的索引來執(zhí)行分布式查詢的某些謂詞。該方案只能在用戶設置提供程序選項Index as Access Path時才能用于索引提供程序。下面是在使用索引執(zhí)行查詢時SQL Server 在提供程序上運行的主要高級步驟:

  1. 通過使用完整的表名和索引名調(diào)用 IOpenRowset::OpenRowset 來打開索引行集。完整表名和索引名依據(jù)前面的遠程查詢方案中所述的方式生成。

  2. 通過使用完整表名調(diào)用 IOpenRowset::OpenRowset 來打開基本表行集。

  3. 通過調(diào)用 IRowsetIndex::SetRange 根據(jù)查詢謂詞設置索引行集的范圍。

  4. 通過索引行集上的 IRowset 掃描索引行集的行。

  5. 使用檢索到的索引行中的書簽列來通過 IRowsetLocate::GetRowsByBookmark 從基本表行集中獲取相應的行。



在基本表上打開行集時,行集屬性 DBPROP_IRowsetLocate 和 DBPROP_BOOKMARKS 是必需的。

單純表掃描

SQL Server 掃描提供程序的整個遠程表并在本地運行所有的查詢命令。通過調(diào)用IOpenRowset::OpenRowset 打開表中相應的行集。SQL Server使用目錄、架構(gòu)和對象名部分按以下方式來構(gòu)造提供給 OPENROWSET 的表名:

  1. 每一個名稱段都使用提供程序的引用字符 (DBLITERAL_QUOTE) 引用,然后使用 DBLITERAL_CATALOG_SEPARATOR 字符連接它們。

  2. 行集對象打開后,SQL Server 使用 IColumnsInfo 接口來驗證該表運行時元數(shù)據(jù)是否和編譯時的元數(shù)據(jù)一致。

  3. SQL Server 使用 IRowset 接口瀏覽并使用表中的行。使用 IRowset::GetNextRows 獲取行,使用 IRowset::RestartPosition 來重定位行集的起始點,使用 IRowset::ReleaseRows 釋放行。



UPDATE和DELETE語句

要從SQL Server 分布式查詢中對遠程表進行更新和刪除,必須滿足如下條件:

  • 提供程序必須支持在被更新或刪除的表上使用 IOpenRowset 打開的行集的書簽。

  • 提供程序必須支持在被更新或刪除的表上使用 IOpenRowset 打開的行集合上的 IRowsetLocateIRowsetChange 接口。

  • IRowsetChange 接口必須支持更新 (SetData) 和刪除 (DeleteRows) 方法。

  • 如果提供程序不支持 ITransactionLocal,則僅在該提供程序設置了 Non-transacted 選項且語句不在用戶事務中時,才允許使用 UPDATE/DELETE 語句。

  • 如果提供程序不支持 ITransactionJoin,只有不在用戶事務中時才允許 UPDATE/DELETE 語句。



下列行集屬性是在被更新的表中打開的行集所必需的:DBPROP_IRowsetLocate、DBPROP_IRowsetChange 和 DBPROP_BOOKMARKS。將DBPROP_UPDATABILITY 行集屬性設置為 DBPROPVAL_UP_CHANGE 還是 DBPROPVAL_UP_DELETE 取決于執(zhí)行的操作是 UPDATE 還是 DELETE。

以下是在提供程序上運行 UPDATE 或 DELETE 操作的高級步驟:

  1. SQL Server 通過 IOpe

    關鍵詞標簽:連接,查詢,SQL,提供,程

相關閱讀

文章評論
發(fā)表評論

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

相關下載

    人氣排行 配置和注冊ODBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠程備份(還原)SQL2000數(shù)據(jù)庫 SQL2000數(shù)據(jù)庫遠程導入(導出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫服務端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級到2000的正確操作步驟 sql server系統(tǒng)表損壞的解決方法 淺談JSP JDBC來連接SQL Server 2005的方法