SQLSTATE 對應

本主題討論 ODBC 2.x 和 ODBC 3.x的 SQLSTATE 值。 如需 ODBC 3.x SQLSTATE 值的詳細資訊,請參閱附錄 A:ODBC 錯誤碼

在 ODBC 3.x 中,系統會傳回 HYxxx SQLSTATE 而非 S1xxx,而且會傳回 42Sxx SQLSTATE 而非 S00XX。 這是為了與 Open Group 和 ISO 標準保持一致。 在許多情況下,由於數個 SQLSTATE 解譯的標準重新定義,因此對應不是一對一的。

當 ODBC 2.x 應用程式升級為 ODBC 3.x 應用程式時,必須變更應用程式以預期使用 ODBC 3.x SQLSTATE,而非 ODBC 2.x SQLSTATE。 下表列出每個 ODBC 2.x SQLSTATE 所對應的 ODBC 3.x SQLSTATE。

當 SQL_ATTR_ODBC_VERSION 環境屬性設為 SQL_OV_ODBC2 時,驅動程式會在呼叫 SQLGetDiagFieldSQLGetDiagRec 時貼上 ODBC 2.x SQLSTATE,而非 ODBC 3.x SQLSTATE。 您可以注意下表第 1 欄中的 ODBC 2.x SQLSTATE 和其對應的第 2 欄 ODBC 3.x SQLSTATE 以確認特定的對應。

ODBC 2.x SQLSTATE ODBC 3.x SQLSTATE 註解
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 如果基礎函式是 SQLBindColSQLColAttributeSQLExtendedFetchSQLFetchSQLFetchScrollSQLGetData,則 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 在呼叫 SQLPrepareSQLExecDirectStatementHandle 的目錄函式之前呼叫 SQLDescribeCol 時,SQLSTATE S1010 會對應到 SQLSTATE HY007。 否則,SQLSTATE S1010 會對應至 SQLSTATE HY010。
S1011 HY011
S1012 HY012
S1090 HY090
S1091 HY091
S1092 HY092
S1093 07009 如果基礎函式是 SQLBindParameterSQLDescribeParam,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

注意

ODBC 3.x SQLSTATE 07008 會對應至 ODBC 2.x SQLSTATE S1000。