SQLSTATE 對應

本主題討論 ODBC 2.x 與 ODBC 3.x 的 SQLSTATE 值。 欲了解更多關於 ODBC 3.x SQLSTATE 值的資訊,請參閱 附錄 A:ODBC 錯誤代碼

在 ODBC 3.x 中,回傳 HYxxx SQLSTATEs 取代 S1xxx,回傳 42Sxx SQLSTATEs 取代 S00XX。 此舉是為了符合開放團體與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 如果底層函式為 SQLBindColSQLColAttributeSQLExtendedFetchSQLFetchSQLFetch、SQLFetchScrollSQLGetData,則 ODBC 2.x SQLSTATE S1002 會映射到 ODBC 3.x SQLSTATE 07009。
S1003 HY003
S1004 HY004
S1008 HY008
S1009 HY009 因為空指標的無效使用而被回傳。
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
第1季第00集 HYT00

備註

ODBC 3.x SQLSTATE 07008 映射到 ODBC 2.x SQLSTATE S1000。