OLE DB Provider 的 SQL 語法需求

OLE DB 提供者所支援的 SQL 層級決定了 SQL Server 如何有效地將分散式查詢作業委派給 OLE DB 提供者。若提供者並不支援 SQL,但只會開啟資料列集,則即使分散式查詢只需要來源資料列集內的資料列子集,SQL Server 仍需擷取整個資料列集,並執行所有的邏輯作業。若 OLE DB 提供者支援許多 SQL 語法元素,SQL Server 即可產生更複雜的查詢,以在資料列集傳回到 SQL Server 之前,先讓來源提供者篩選沒有必要的資料列。

OLE DB 規格定義了 DBPROP_SQLSUPPORT 屬性,提供者可透過它來報告它們支援的 SQL 語法層級。不同的 SQL Server 版本在分散式查詢內需要的最低 SQL 支援層級為:

  • SQL Server 2005:DBPROPVAL_SQL_SUBMINIMUM

  • SQL Server 2000:DBPROPVAL_SQL_SUBMINIMUM

  • SQL Server 7.0:DBPROPVAL_SQL_ANSI92_ENTRY 或 DBPROPVAL_SQL_ODBC_CORE

除了支援基礎 OLE DB 提供者的較低層級 SQL 語法外,SQL Server 2000 和更新的版本還定義了 SQLPROPSET_OPTHINTS 屬性集,提供者可以使用此屬性集來指定:除了 DBPROPVAL_SQL_SUBMINIMUM 所定義的那些 SQL 語法元素以外,還支援個別的 SQL 語法元素。若提供者支援可用來最佳化分散式查詢的一個或兩個功能,但不支援完整的 DBPROPVAL_SQL_ANSI92_ENTRY 或 DBPROPVAL_SQL_ODBC_CORE 語法,則提供者可以使用 SQLPROPSET_OPTHINTS 屬性,通知 SQL Server 它支援哪些最佳化功能。