模式值参数

目录函数中的某些参数(如 SQLTable 中的TableName 参数)接受搜索模式。 如果 SQL_ATTR_METADATA_ID 语句属性设置为 SQL_FALSE,则这些参数接受搜索模式;它们是标识符参数,如果此属性设置为SQL_TRUE,则不接受搜索模式。

搜索模式字符包括:

  • 表示任何单个字符的下划线 (_)。

  • 百分号(%),表示零个或多个字符的任何序列。

  • 转义字符(特定于驱动程序),用于将下划线、百分比符号和转义字符作为文本包含在内。 如果转义字符位于非特殊字符之前,则转义字符没有特殊含义。 如果转义字符位于特殊字符之前,它将转义特殊字符。 例如,“\a”将被视为两个字符“\”和“a”,但“\%”将被视为非特殊单个字符“%”。

使用 SQLGetInfo 中的SQL_SEARCH_PATTERN_ESCAPE选项检索转义字符。 它必须位于接受搜索模式的参数中任何一个下划线、百分号或转义字符之前,以将该字符作为字面值包含。 下表显示了示例。

搜索模式 Description
%A% 包含字母 A 的所有标识符
Abc_ 以 ABC 开头的所有四个字符标识符
Abc\_ 标识符ABC_,假设转义字符为反斜杠(\)
\\% 所有以反斜杠(\)开头的标识符,假定转义字符是反斜杠

必须特别注意在接受搜索模式的参数中转义搜索模式字符。 对于标识符中常用的下划线字符,这尤其如此。 应用程序中的一个常见错误是从一个目录函数中检索值,并将该值传递给另一个目录函数中的搜索模式参数。 例如,假设应用程序从 SQLTable 的结果集中检索表名称MY_TABLE,并将其传递给 SQLColumns 以检索MY_TABLE中的列列表。 应用程序不会获取MY_TABLE的列,而是获取与搜索模式MY_TABLE匹配的所有表的列,例如MY_TABLE、MY1TABLE、MY2TABLE等。

注释

ODBC 2.x 驱动程序不支持 SQLTables 中的 CatalogName 参数中的搜索模式。 如果SQL_ATTR_ ODBC_VERSION环境属性设置为 SQL_OV_ODBC3,ODBC 3*.x* 驱动程序接受此参数中的搜索模式;如果此参数设置为SQL_OV_ODBC2,则它们不接受此参数中的搜索模式。

将 null 指针传递给搜索模式参数不会限制该参数的搜索;也就是说,null 指针和搜索模式 %(任何字符)是等效的。 但是,零长度搜索模式(即,指向长度为零的字符串的有效指针)仅匹配空字符串(“)。