SQLPROPSET_OPTHINTS 属性集程序设计

除了在 DBPROPVAL_SQL_SUBMINIMUM 中定义的功能,各个 OLE DB 访问接口还可以支持其他一些 SQL 功能(但并非 DBPROPVAL_SQL_ODBC_CORE 或 DBPROPVAL_SQL_ANSI92_ENTRY 中的全部功能)。SQL Server 查询优化器可以使用这些驱动程序所支持的某些功能来提高分布式查询的性能。这些提供程序可以使用 SQLPROPSET_OPTHINTS 属性集向 SQL Server 报告它们所支持的、可以提高分布式查询速度的功能。

尽管已在 SQL Server 文档中定义了 SQLPROPSET_OPTHINTS 属性集,但是各个 OLE DB 访问接口的开发人员必须为他们的提供程序中的属性集编写支持代码。将对此属性集的支持编入提供程序中以后,SQL Server 就可以用此属性集来优化分布式查询的性能。

支持 DBPROPVAL_SQL_ANSI92_ENTRY 或 DBPROPVAL_SQL_ODBC_CORE 的 OLE DB 访问接口除了需要 SQLPROP_DATELITERALS 外,不需要其他任何 SQLPROPSET_OPTHINTS 属性。这些提供程序必须支持 SQLPROPSET_OPTHINTS 属性集(SQLPROP_DATELITERALS 除外)所涉及的全部功能,以便有资格支持 DBPROPVAL_SQL_ANSI92_ENTRY 或 DBPROPVAL_SQL_ODBC_CORE。

下表列出了通过 SQLPROPSET_OPTHINTS 报告的属性。

属性

说明

SQLPROP_ANSILIKE

指定按照 ISO 入门级中的规定支持包含 % 和 _ 通配符的 LIKE 子句。

SQLPROP_DATELITERALS

指定提供程序支持在每个 Transact-SQL 语法中使用 datetime 文字或常量。

SQLPROP_DYNAMICSQL

指定提供程序支持 ODBC 参数标记语法使用问号 ( ? )。

SQLPROP_INNERJOIN

指定提供程序支持在 WHERE 子句中引用多个表,条件是这些引用不是外部联接引用。

SQLPROP_GROUPBY

指定提供程序支持在 SELECT 语句中包含 GROUP BY 和 HAVING 子句。此属性还指定了提供程序支持 AVG、COUNT、MIN、MAX 和 SUM 聚合函数,条件是未指定 DISTINCT 作为聚合参数。

SQLPROP_NESTEDQUERIES

指定提供程序支持在 FROM 子句中包含嵌套 SELECT 语句。

SQLPROP_SQLLIKE

指明提供程序支持 SQL Server LIKE 语法。当 SQLPROP_SQLLIKE 处于打开状态时,优化器可以向远程服务器发送包含 SQL Server LIKE 谓词的查询(如果查询计划允许这样做)。如果 SQLPROP_SQLLIKE 处于关闭状态,则始终在本地对 SQL Server LIKE 谓词求值。

SQLPROP_SUBQUERIES

指定提供程序按照 ISO 入门级中的规定支持子查询。

以下是用于定义 OLE DB 访问接口代码中的 SQLPROPSET_OPTHINTS 属性集的常量:

Extern const GUID SQLPROPSET_OPTHINTS =
{ 0x2344480c, 0x33a7, 0x11d1,
     { 0x9b, 0x1a, 0x0, 0x60, 0x8, 0x26, 0x8b, 0x9e }
};
enum SQLPROPERTIES
{
     SQLPROP_NESTEDQUERIES = 0x4,
     SQLPROP_DYNAMICSQL = 0x5,
     SQLPROP_GROUPBY = 0x6,
     SQLPROP_DATELITERALS = 0x7,
     SQLPROP_ANSILIKE = 0x8,
     SQLPROP_INNERJOIN = 0x9,
     SQLPROP_SUBQUERIES = 0x10,
     SQLPROP_SQLLIKE = 0x15
}