SQLSTATE マッピング

このトピックでは、ODBC 2.x と ODBC 3.x の SQLSTATE 値について説明します。 ODBC 3.x SQLSTATE 値の詳細については、「付録 A: ODBC エラー コード」を参照してください。

ODBC 3.x では、S1xxx ではなく HYxxx SQLSTATE が返され、S00XX ではなく 42Sxx SQLSTATE が返されます。 これは、Open Group と ISO 標準に合わせて行われました。 多くの場合、標準では複数の SQLSTATE の解釈が再定義されているため、マッピングは 1 対 1 ではありません。

ODBC 2.x アプリケーションを ODBC 3.x アプリケーションにアップグレードする場合、ODBC 2.x SQLSTATE ではなく ODBC 3.x SQLSTATE を想定するようにアプリケーションを変更する必要があります。 次の表に、各 ODBC 2.x SQLSTATE がマップされている ODBC 3.x SQLSTATE を示します。

SQL_ATTR_ODBC_VERSION 環境属性が SQL_OV_ODBC2 に設定されている場合、SQLGetDiagField または SQLGetDiagRec が呼び出されると、ドライバーは ODBC 3.x SQLSTATE ではなく ODBC 2.x SQLSTATE をポストします。 特定のマッピングは、次の表の列 1 の ODBC 2.x SQLSTATE を、列 2 の ODBC 3.x SQLSTATE に対応する点に注意することで決定できます。

ODBC 2.x SQLSTATE ODBC 3.x SQLSTATE Comments
01S03 01001
01S04 01001
22003 HY019
22008 22007
22005 22018
24000 07005
37000 42000
70100 HY018
S0001 42S01
S0002 42S02
S0011 42S11
S0012 42S12
S0021 42S21
S0022 42S22
S0023 42S23
S1000 HY000
S1001 HY001
S1002 07009 基になる関数が SQLBindColSQLColAttributeSQLExtendedFetchSQLFetchSQLFetchScroll、または SQLGetData の場合、ODBC 2.x SQLSTATE S1002 は ODBC 3.x SQLSTATE 07009 にマップされます。
S1003 HY003
S1004 HY004
S1008 HY008
S1009 HY009 無効な null ポインターに使用する場合に返されます。
S1009 HY024 無効な属性値に対して返されます。
S1009 HY092 同時実行が読み取り専用である場合、SQLSetPos の呼び出しによるデータの更新または削除、または SQLBulkOperations の呼び出しによるデータの追加、更新、または削除の際に返されます。
S1010 HY007 HY010 SQLPrepareSQLExecDirect、または StatementHandle のカタログ関数を呼び出す前に SQLDescribeCol が呼び出されると、SQLSTATE S1010 は SQLSTATE HY007 にマップされます。 それ以外の場合、SQLSTATE S1010 は SQLSTATE HY010 にマップされます。
S1011 HY011
S1012 HY012
S1090 HY090
S1091 HY091
S1092 HY092
S1093 07009 基になる関数が SQLBindParameter または SQLDescribeParam の場合、ODBC 3.x SQLSTATE 07009 は ODBC 2.x SQLSTATE S1093 にマップされます。
S1096 HY096
S1097 HY097
S1098 HY098
S1099 HY099
S1100 HY100
S1101 HY101
S1103 HY103
S1104 HY104
S1105 HY105
S1106 HY106
S1107 HY107
S1108 HY108
S1109 HY109
S1110 HY110
S1111 HY111
S1C00 HYC00
S1T00 HYT00

Note

ODBC 3.x SQLSTATE 07008 は、ODBC 2.x SQLSTATE S1000 にマップされます。