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 時,驅動程式會在呼叫 SQLGetDiagField 或 SQLGetDiagRec 時貼上 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 | 如果基礎函式是 SQLBindCol、SQLColAttribute、SQLExtendedFetch、SQLFetch、SQLFetchScroll 或 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 | 在呼叫 SQLPrepare、SQLExecDirect 或 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 |
注意
ODBC 3.x SQLSTATE 07008 會對應至 ODBC 2.x SQLSTATE S1000。