パターン値の引数

SQLTablesTableName 引数など、カタログ関数の一部の引数は、検索パターンを受け入れます。 SQL_ATTR_METADATA_ID ステートメント属性が SQL_FALSE に設定されている場合、これらの引数は検索パターンを受け入れます。これらは、この属性が SQL_TRUE に設定されている場合、検索パターンを受け入れられない識別子引数です。

検索パターンの文字は次のとおりです:

  • 任意の 1 文字を表すアンダースコア (_)。

  • パーセント記号 (%)、0 個以上の文字の任意のシーケンスを表します。

  • エスケープ文字。これはドライバー固有であり、アンダースコア、パーセント記号、およびエスケープ文字をリテラルとして含めるために使用されます。 エスケープ文字が特殊文字以外の文字の前にある場合、エスケープ文字には特別な意味はありません。 エスケープ文字が特殊文字の前にある場合は、特殊文字をエスケープします。 たとえば、「\a」 は 「\」 と 「a」 の 2 つの文字として扱われますが、「\%」 は非特殊な単一文字 「%」 として扱われます。

エスケープ文字は、SQLGetInfo の SQL_SEARCH_PATTERN_ESCAPE オプションを使用して取得されます。 検索パターンを受け入れる引数内のアンダースコア、パーセント記号、またはエスケープ文字の前に、その文字をリテラルとして含める必要があります。 以下の表に例を示します。

検索パターン 説明
%A% 文字 A を含むすべての識別子
ABC_ ABC で始まる 4 つの文字識別子すべて
ABC\_ エスケープ文字がバックスラッシュ (\) であると仮定して、識別子ABC_
\\% エスケープ文字がバックスラッシュであると仮定して、バックスラッシュ (\) で始まるすべての識別子

検索パターンを受け入れる引数の検索パターン文字をエスケープするには、特別な注意が必要です。 これは、識別子でよく使用されるアンダースコア文字に特に当てはまります。 アプリケーションでよくある間違いは、あるカタログ関数から値を取得し、その値を別のカタログ関数の検索パターン引数に渡すことである。 たとえば、アプリケーションが SQLTables の結果セットからテーブル名MY_TABLEを取得し、これを SQLColumns に渡して、MY_TABLE内の列の一覧を取得するとします。 アプリケーションは、MY_TABLE の列を取得する代わりに、MY_TABLE、MY1TABLE、MY2TABLE など、MY_TABLE 検索パターンに一致するすべてのテーブルの列を取得します。

ODBC 2.x ドライバーは、SQLTablesCatalogName 引数の検索パターンをサポートしていません。 ODBC 3*.x* ドライバーは、SQL_ATTR_ ODBC_VERSION 環境属性が SQL_OV_ODBC3 に設定されている場合、この引数で検索パターンを受け入れます。SQL_OV_ODBC2 に設定されている場合、この引数では検索パターンを受け入れません。

検索パターン引数に null ポインターを渡しても、その引数の検索は制約されません。つまり、null ポインターと検索パターン % (任意の文字) は同等です。 ただし、長さ 0 の検索パターン (長さ 0 の文字列への有効なポインター) は、空の文字列 ("") にのみ一致します。