適合 性
導入版:ODBC 1.0 規格準拠:ODBC
Summary
SQLPrimaryKeys はテーブルのプライマリキーを構成する列名を返します。 ドライバーは、結果セットとして情報を返します。 この関数は、単一の呼び出しで複数のテーブルからプライマリキーを返すことをサポートしていません。
構文
SQLRETURN SQLPrimaryKeys(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3);
引数
StatementHandle
[入力]ステートメント ハンドル。
CatalogName
[入力]カタログ名。 ドライバが一部のテーブルにはカタログをサポートしているが、他のテーブルではサポートしない場合(例えば異なるDBMSからデータを取得する場合など)、空文字列(「」)はカタログを持たないテーブルを示します。
CatalogNameは 文字列検索パターンを含めません。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 CatalogName は識別子として扱われ、その大文字は重要ではありません。 もしSQL_FALSEであれば、 カタログ名 は通常の引数となります。文字通りに扱われており、そのケースは重要です。 詳細については、「カタログ関数の引数」を参照してください。
NameLength1
[入力]*カタログ名の文字数。
スキーマ名
[入力]スキーマ名。 ドライバが一部のテーブルにはスキーマをサポートし、他のテーブルにはサポートしない場合(例えば異なるDBMSからデータを取得する場合など)、空の文字列(「」)はスキーマを持たないテーブルを示します。
SchemaNameは 文字列検索パターンを含めません。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 SchemaName は識別子として扱われ、その大文字は重要ではありません。 もしSQL_FALSEなら、 SchemaName は通常の引数です。文字通りに扱われており、そのケース自体は重要ではありません。
NameLength2
[入力]*SchemaNameの文字数。
テーブル名
[入力]テーブル名。 この引数はヌルポインタにはなり得ません。
TableNameは 文字列検索パターンを含めません。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 TableName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 TableName は通常の引数です。文字通りに扱われており、そのケース自体は重要ではありません。
NameLength3
[入力]*TableNameの文字数。
返品
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。
Diagnostics
SQLPrimaryKeysがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、SQLGetDiagRecを呼び出し、HandleTypeをSQL_HANDLE_STMT、HandleをStatementHandleで呼び出すことで関連するSQLSTATE値を取得できます。 以下の表は 、SQLPrimaryKeys によって一般的に返されるSQLSTATE値の一覧と、この関数の文脈でのそれぞれの値を説明しています。「(DM)」という表記は、ドライバーマネージャーが返すSQLstateの記述の前に記載されます。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。
| SQLSTATE | エラー | Description |
|---|---|---|
| 01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
| 08S01 | 通信リンクエラー | ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。 |
| 24000 | カーソル状態が無効 | (DM) StatementHandle でカーソルが開き、 SQLFetch または SQLFetchScroll が呼び出されました。 StatementHandleにはカーソルが開かれていましたが、SQLFetchやSQLFetchScrollは呼び出されていませんでした。 |
| 40001 | シリアル化エラー | 別のトランザクションでリソースのデッドロックが発生したため、トランザクションがロールバックされました。 |
| 40003 | ステートメントの入力候補が不明です | この関数の実行中に関連付けられた接続が失敗し、トランザクションの状態を特定できません。 |
| HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージには、エラーとその原因が記述されています。 |
| HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
| HY008 | 操作が取り消されました |
StatementHandle に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle が StatementHandle で呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle がマルチスレッド アプリケーション内の別のスレッドから StatementHandle で呼び出されました。 |
| HY009 | null ポインターの使用が無効です | (DM) TableName の引数はnullポインタでした。 SQL_ATTR_METADATA_ID文属性はSQL_TRUEに設定され、 CatalogName の引数はnullポインタ、SQL_CATALOG_NAME情報型の SQLGetInfo はカタログ名がサポートされていることを返します。 (DM) SQL_ATTR_METADATA_ID文属性はSQL_TRUEに設定され、 SchemaName の引数はnullポインタでした。 |
| HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は 、SQLPrimaryKeys 関数が呼び出された時点でもまだ実行中でした。 (DM) SQLExecute、 SQLExecDirect、または SQLMoreResultsStatementHandle が呼び出され、SQL_PARAM_DATA_AVAILABLEが返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 (DM) 非同期実行関数 (この関数ではない) が StatementHandle に対して呼び出されこの関数が呼び出されたときにはまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations、または SQLSetPos が StatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 |
| HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
| HY090 | 文字列またはバッファーの長さが無効です | (DM) 名前の長さの引数のうち1つの値は0未満でSQL_NTS以下であり、対応する名前引数はヌルポインタではありません。 名前の長さの引数のいずれかの値が、対応する名前の最大長の値を超えました。 |
| HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。 |
| HYC00 | 省略可能な機能が実装されていません | カタログが指定されており、ドライバーやデータソースはカタログをサポートしていません。 スキーマが指定されており、ドライバーやデータソースはスキーマをサポートしていません。 SQL_ATTR_CONCURRENCY属性とSQL_ATTR_CURSOR_TYPE ステートメント属性の現在の設定の組み合わせは、ドライバーまたはデータ ソースではサポートされていませんでした。 SQL_ATTR_USE_BOOKMARKS ステートメント属性はSQL_UB_VARIABLEに設定され、SQL_ATTR_CURSOR_TYPE ステートメント属性は、ドライバーがブックマークをサポートしていないカーソルの種類に設定されました。 |
| HYT00 | タイムアウトの期限が切れました | タイムアウト期間が終了すると、データソースが要求された結果セットを返すまでには時間が切れました。 タイムアウト期間は、SQL_ATTR_QUERY_TIMEOUT SQLSetStmtAttr によって設定されます。 |
| HYT01 | 接続がタイムアウトしました | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。 |
| IM001 | ドライバーは、この関数をサポートしていません | (DM) StatementHandle に関連付けられているドライバーは、関数をサポートしていません。 |
| IM017 | 非同期通知モードでポーリングが無効になっている | 通知モデルが使用されるたびに、ポーリングは無効になります。 |
| IM018 | SQLCompleteAsync は、このハンドルに対する前の非同期操作を完了するために呼び出されていません。 | ハンドルに対する前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、 SQLCompleteAsync をハンドルで呼び出す必要があります。 |
Comments
SQLPrimaryKeys は、TABLE_CAT、TABLE_SCHEM、TABLE_NAME、KEY_SEQ順に並べた標準結果セットとして結果を返します。 この情報の使用方法については、「 カタログ データの使用」を参照してください。
以下の列はODBC 3に改名されています。x。 カラム名の変更は後方互換性には影響しません。なぜならアプリケーションはカラム番号でバインドするからです。
| ODBC 2.0 列 | ODBC 3。x 列 |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| テーブルの所有者 | TABLE_SCHEM |
TABLE_CAT、TABLE_SCHEM、TABLE_NAME、COLUMN_NAMEの各カラムの実際の長さを把握するには、SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_TABLE_NAME_LEN、SQL_MAX_COLUMN_NAME_LENのオプションで SQLGetInfo に連絡してください。
Note
ODBC カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「 カタログ関数」を参照してください。
次の表に、結果セットの列を示します。 6列(PK_NAME)以降の追加列はドライバーによって定義可能です。 アプリケーションは、明示的な順序位置を指定するのではなく、結果セットの末尾からカウントダウンすることでドライバー固有の列にアクセスするべきです。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。
| 列名 | 列番号 | データの種類 | Comments |
|---|---|---|---|
| TABLE_CAT(ODBC 1.0) | 1 | Varchar | プライマリキーテーブルカタログ名;データソースに適用できない場合はNULLです。 ドライバが一部のテーブルにはカタログをサポートしているが、他のテーブルではサポートしない場合(例えば異なるDBMSからデータを取得する場合など)、カタログを持たないテーブルに対して空の文字列("")を返します。 |
| TABLE_SCHEM(ODBC 1.0) | 2 | Varchar | プライマリキーテーブルスキーマ名;データソースに適用できない場合はNULLです。 ドライバが一部のテーブルにはスキーマをサポートしているが、他のテーブルではサポートしない場合、例えば異なるDBMSからデータを取得する場合、スキーマを持たないテーブルに対して空の文字列("")を返します。 |
| TABLE_NAME(ODBC 1.0) | 3 | ヴァルチャーはNULLではありません | 主キーテーブル名。 |
| COLUMN_NAME(ODBC 1.0) | 4 | ヴァルチャーはNULLではありません | 主キー列名。 ドライバーは名前のない列に対して空文字列を返します。 |
| KEY_SEQ(ODBC 1.0) | 5 | Smallint は NULL ではありません | 列のシーケンス番号はキー(1から始まる)。 |
| PK_NAME(ODBC 2.0) | 6 | Varchar | 主キー名。 データソースに適用できない場合はNULLです。 |
コード例
SQLForeignKeysを参照してください。
関連関数
| ~についての情報 | 参照先 |
|---|---|
| 結果セット内の列へのバッファーのバインド | SQLBindCol 関数 |
| ステートメント処理の取り消し | SQLCancel 関数 |
| データブロックのフェッチまたは結果セットのスクロール | SQLFetchScroll 関数 |
| 順方向に単一行またはデータブロックを取得する方法 | SQLFetch 関数 |
| 外部キーの列を返す | SQLForeignKeys 関数 |
| 表の統計と指数の返還 | SQLStatistics 関数 |