アプリケーションが ODBC 関数を呼び出すと、ドライバーは関数を実行し、2 つの方法で診断情報を返します。リターン コードは ODBC 関数の全体的な成功または失敗を示し、診断レコードは関数に関する詳細情報を提供します。 診断レコードには、ヘッダー レコードと状態レコードが含まれます。 関数が成功した場合でも、少なくとも 1 つの診断レコード (ヘッダー レコード) が返されます。
診断情報は、開発時に、ハードコーディングされた SQL ステートメントの無効なハンドルや構文エラーなどのプログラミング エラーをキャッチするために使用されます。 また、実行時に、ユーザーが入力した SQL ステートメントのデータの切り捨て、規則違反、構文エラーなどの実行時エラーや警告をキャッチするためにも使用されます。 プログラム ロジックは通常、リターン コードに基づいています。
たとえば、アプリケーションが SQLFetch を呼び出して結果セット内の行を取得した後、リターン コードは、結果セットの末尾に達した (SQL_NO_DATA)、情報メッセージが返された (SQL_SUCCESS_WITH_INFO)、またはエラーが発生した (SQL_ERROR) かどうかを示します。
SQL Server Native Client ODBC ドライバーがSQL_SUCCESS以外のものを返す場合、アプリケーションは SQLGetDiagRec を呼び出して、情報またはエラー メッセージを取得できます。 複数のメッセージがある場合 は、SQLGetDiagRec を使用してメッセージ セットを上下にスクロールします。
戻りコード SQL_INVALID_HANDLEは常にプログラミング エラーを示し、実行時に発生することはありません。 他のすべてのリターン コードは実行時情報を提供しますが、SQL_ERRORはプログラミング エラーを示している可能性があります。
元の Microsoft SQL Server ネイティブ API DB-Library for C を使用すると、アプリケーションは、エラーまたはメッセージを返すコールバック エラー処理およびメッセージ処理関数をインストールできます。 PRINT、RAISERROR、DBCC、SET などの一部の Transact-SQL ステートメントは、結果セットではなく、DB-Library メッセージ ハンドラー関数に結果を返します。 ただし、ODBC API にはそのようなコールバック機能はありません。 SQL Server Native Client ODBC ドライバーは、SQL Server から返されるメッセージを検出すると、ODBC リターン コードをSQL_SUCCESS_WITH_INFOまたはSQL_ERRORに設定し、メッセージを 1 つ以上の診断レコードとして返します。 そのため、ODBC アプリケーションでは、これらのリターン コードを慎重にテストし、 SQLGetDiagRec を呼び出してメッセージ データを取得する必要があります。
トレース エラーの詳細については、「 データ アクセストレース」を参照してください。 SQL Server 2012 で追加されたエラー トレースの機能強化については、「 拡張イベント ログの診断情報へのアクセス」を参照してください。