16.10.7 SQLSpecialColumns,SQLSpecialColumnsW
- 〈この項の構成〉
(1) 機能
指定されたテーブルの列に関する次のどちらかの情報を取得します。
-
テーブルの行を一意に識別する最適な列のセット
-
行の値がトランザクションによって更新されるときに自動的に更新される列
SQL文の結果セットの形式で出力します。
ただし,自動的に列を更新する機能をサポートしていないため,検索結果セットの行数は常に0になります。
(2) 形式
-
SQLSpecialColumnsの場合
SQLRETURN SQLSpecialColumns ( SQLHSTMT StatementHandle, /* In */ SQLUSMALLINT IdentifierType, /* In */ SQLCHAR * CatalogName, /* In */ SQLSMALLINT NameLength1, /* In */ SQLCHAR * SchemaName, /* In */ SQLSMALLINT NameLength2, /* In */ SQLCHAR * TableName, /* In */ SQLSMALLINT NameLength3, /* In */ SQLUSMALLINT Scope, /* In */ SQLUSMALLINT Nullable /* In */ )
-
SQLSpecialColumnsWの場合
SQLRETURN SQLSpecialColumnsW ( SQLHSTMT StatementHandle, /* In */ SQLUSMALLINT IdentifierType, /* In */ SQLWCHAR * CatalogName, /* In */ SQLSMALLINT NameLength1, /* In */ SQLWCHAR * SchemaName, /* In */ SQLSMALLINT NameLength2, /* In */ SQLWCHAR * TableName, /* In */ SQLSMALLINT NameLength3, /* In */ SQLUSMALLINT Scope, /* In */ SQLUSMALLINT Nullable /* In */ )
(3) 引数
- StatementHandle:
-
ステートメントハンドルを指定します。
この関数を実行する前にSQLAllocHandleの*OutputHandlePtrで出力された値を指定します。
- IdentifierType:
-
返す列の種類として,次の値のどちらかを指定します。
IdentifierType
内容
SQL_BEST_ROWID
列から値を取得することで,指定されたテーブルの行が一意に識別できる最適な列または列のセットを返します。
行を一意に識別できるインデクスの列がテーブル内に存在する場合はその列を返します。テーブル内にそういった列が存在しない場合は行を識別できるように一時的に作成した擬似列が返されます。
SQL_ROWVER
トランザクションによって行の値が更新される場合,指定されたテーブル内にデータソースによって自動的に更新される列があるとき,その列が返されます。
- CatalogName:
-
テーブルに対するカタログ名を指定します。
- NameLength1:
-
*CatalogNameの長さ※を指定します。
- SchemaName:
-
テーブルに対するスキーマ名を指定します。
- NameLength2:
-
*SchemaNameの長さ※を指定します。
- TableName:
-
テーブル名を指定します。
- NameLength3:
-
*TableNameの長さ※を指定します。
- Scope:
-
必要最小限の行IDの有効範囲を次の値から選んで指定します。
Scope
内容
SQL_SCOPE_CURROW
行IDは,その行に位置づけられている間だけ有効です。
SQL_SCOPE_TRANSACTION
行IDは,現在のトランザクション中だけ有効です。
SQL_SCOPE_SESSION
行IDは,セッション(トランザクション境界にわたる)中,有効です。
- Nullable:
-
ナル値を格納する特別な列を返すかどうかを指定します。
次の値のどちらかを指定します。
Nullable
内容
SQL_NO_NULLS
ナル値を格納できる特別な列を除きます。ドライバには,SQL_NO_NULLSをサポートできないものもあり,SQL_NO_NULLSが指定されると,空の結果セットを返すため,注意が必要です。アプリケーションはこれを踏まえて,必要な場合にだけSQL_NO_NULLSを指定します。
SQL_NULLABLE
ナル値が格納されている場合でも,特別な列を返します。
- 注※
-
長さの単位は,SQLSpecialColumnsの場合はバイト長,SQLSpecialColumnsWの場合は文字数となります。
(4) 戻り値
SQL_SUCCESS,SQL_ERROR,またはSQL_INVALID_HANDLEが返されます。
(5) SQLSTATE
この関数では次のSQLSTATEを返します。
SQLSTATE |
説明 |
備考 |
返却 |
---|---|---|---|
01000 |
一般警告 |
− |
× |
08S01 |
通信リンク失敗 |
× |
|
24000 |
無効なカーソル状態 |
カーソルがオープンしている状態のときに実行されました。 |
○ |
40001 |
直列化の失敗 |
− |
× |
40003 |
ステートメントの完了が不明 |
× |
|
HY000 |
一般エラー |
× |
|
HY001 |
メモリ割り当てエラー |
○ |
|
HY008 |
動作がキャンセルされた |
× |
|
HY009 |
NULLポインタの不正使用 |
× |
|
HY010 |
関数シーケンスエラー |
○ |
|
HY013 |
メモリ管理エラー |
× |
|
HY090 |
無効な文字列長または無効なバッファ長 |
× |
|
HY097 |
IdentifierTypeに無効な値を指定された |
× |
|
HY098 |
Scopeに無効な値を指定された |
× |
|
HY099 |
Nullableに無効な値を指定された |
× |
|
HY117 |
接続がサスペンド中 |
× |
|
HYC00 |
オプション機能は実装されていない |
× |
|
HYT00 |
タイムアウト終了 |
× |
|
HYT01 |
接続タイムアウト終了 |
× |
|
IM001 |
ドライバはこの関数をサポートしていない |
× |
|
IM017 |
非同期ポーリングが不正 |
× |
|
IM018 |
非同期実行が未完了 |
× |
- (凡例)
-
○:HADB ODBCドライバが返すことがあるSQLSTATEです。
×:HADB ODBCドライバが返さないSQLSTATEです。
−:なし。