模式值引數
目錄函式中的某些引數接受搜尋模式,例如 SQLTables 中的 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 指標及搜尋模式 % (任何字元) 是相同的。 不過,零長度搜尋模式 (也就是長度為零之字串的有效指標) 僅與空白字串 ("") 相符。