SQLGetDiagField

The SQL Server Native Client ODBC driver specifies the following additional diagnostics fields for SQLGetDiagField. These fields support rich error reporting for SQL Server applications and are available in all diagnostics records generated on connected ODBC connection handles and ODBC statement handles. The fields are defined in sqlncli.h.

Diagnostics record field Description
SQL_DIAG_SS_LINE Reports the line number of a stored procedure generating an error. The value of SQL_DIAG_SS_LINE is meaningful only if SQL_DIAG_SS_PROCNAME returns a value. The value is returned as an unsigned, 16-bit integer.
SQL_DIAG_SS_MSGSTATE The state of an error message. For information about the error message state, see RAISERROR. The value is returned as a signed, 32-bit integer.
SQL_DIAG_SS_PROCNAME Name of the stored procedure generating an error, if appropriate. The value is returned as a character string. The length of the string (in characters) depends on the version of the SQL Server . It can be determined by calling SQLGetInfo requesting the value for SQL_MAX_PROCEDURE_NAME_LEN.
SQL_DIAG_SS_SEVERITY The severity level of the associated error message. The value is returned as a signed, 32-bit integer.
SQL_DIAG_SS_SRVNAME The name of the server on which the error occurred. The value is returned as a character string. The length of the string (in characters) is defined by the SQL_MAX_SQLSERVERNAME macro in sqlncli.h.

SQL Server -specific diagnostic fields that contain character data, SQL_DIAG_SS_PROCNAME and SQL_DIAG_SS_SRVNAME, return that data to the client as null terminated, ANSI, or Unicode strings. If necessary, the count of characters should be adjusted by the character width. Alternately, a portable C data type such as TCHAR or SQLTCHAR can be used to ensure correct program variable length.

The SQL Server Native Client ODBC driver reports the following additional dynamic function codes that identify the last attempted SQL Server statement. The dynamic function code is returned in the header (record 0) of the diagnostics record set and is therefore available on every execution (successful or not).

Dynamic function code Source
SQL_DIAG_DFC_SS_ALTER_DATABASE ALTER DATABASE statement
SQL_DIAG_DFC_SS_CHECKPOINT CHECKPOINT statement
SQL_DIAG_DFC_SS_CONDITION Error arose in the WHERE or HAVING clauses of a statement.
SQL_DIAG_DFC_SS_CREATE_DATABASE CREATE DATABASE statement
SQL_DIAG_DFC_SS_CREATE_DEFAULT CREATE DEFAULT statement
SQL_DIAG_DFC_SS_CREATE_PROCEDURE CREATE PROCEDURE statement
SQL_DIAG_DFC_SS_CREATE_RULE CREATE RULE statement
SQL_DIAG_DFC_SS_CREATE_TRIGGER CREATE TRIGGER statement
SQL_DIAG_DFC_SS_CURSOR_DECLARE DECLARE CURSOR statement
SQL_DIAG_DFC_SS_CURSOR_OPEN OPEN statement
SQL_DIAG_DFC_SS_CURSOR_FETCH FETCH statement
SQL_DIAG_DFC_SS_CURSOR_CLOSE CLOSE statement
SQL_DIAG_DFC_SS_DEALLOCATE_CURSOR DEALLOCATE statement
SQL_DIAG_DFC_SS_DBCC DBCC statement
SQL_DIAG_DFC_SS_DENY DENY statement
SQL_DIAG_DFC_SS_DROP_DATABASE DROP DATABASE statement
SQL_DIAG_DFC_SS_DROP_DEFAULT DROP DEFAULT statement
SQL_DIAG_DFC_SS_DROP_PROCEDURE DROP PROCEDURE statement
SQL_DIAG_DFC_SS_DROP_RULE DROP RULE statement
SQL_DIAG_DFC_SS_DROP_TRIGGER DROP TRIGGER statement
SQL_DIAG_DFC_SS_DUMP_DATABASE BACKUP or DUMP DATABASE statement
SQL_DIAG_DFC_SS_DUMP_TABLE DUMP TABLE statement
SQL_DIAG_DFC_SS_DUMP_TRANSACTION BACKUP or DUMP TRANSACTION statement. Also returned for a CHECKPOINT statement if the trunc. log on chkpt. database option is on.
SQL_DIAG_DFC_SS_GOTO GOTO control-of-flow statement
SQL_DIAG_DFC_SS_INSERT_BULK INSERT BULK statement
SQL_DIAG_DFC_SS_KILL KILL statement
SQL_DIAG_DFC_SS_LOAD_DATABASE LOAD or RESTORE DATABASE statement
SQL_DIAG_DFC_SS_LOAD_HEADERONLY LOAD or RESTORE HEADERONLY statement
SQL_DIAG_DFC_SS_LOAD_TABLE LOAD TABLE statement
SQL_DIAG_DFC_SS_LOAD_TRANSACTION LOAD or RESTORE TRANSACTION statement
SQL_DIAG_DFC_SS_PRINT PRINT statement
SQL_DIAG_DFC_SS_RAISERROR RAISERROR statement
SQL_DIAG_DFC_SS_READTEXT READTEXT statement
SQL_DIAG_DFC_SS_RECONFIGURE RECONFIGURE statement
SQL_DIAG_DFC_SS_RETURN RETURN control-of-flow statement
SQL_DIAG_DFC_SS_SELECT_INTO SELECT INTO statement
SQL_DIAG_DFC_SS_SET SET statement (generic, all options)
SQL_DIAG_DFC_SS_SET_IDENTITY_INSERT SET IDENTITY_INSERT statement
SQL_DIAG_DFC_SS_SET_ROW_COUNT SET ROWCOUNT statement
SQL_DIAG_DFC_SS_SET_STATISTICS SET STATISTICS IO or SET STATISTICS TIME statements
SQL_DIAG_DFC_SS_SET_TEXTSIZE SET TEXTSIZE statement
SQL_DIAG_DFC_SS_SETUSER SETUSER statement
SQL_DIAG_DFC_SS_SET_XCTLVL SET TRANSACTION ISOLATION LEVEL statement
SQL_DIAG_DFC_SS_SHUTDOWN SHUTDOWN statement
SQL_DIAG_DFC_SS_TRANS_BEGIN BEGIN TRAN statement
SQL_DIAG_DFC_SS_TRANS_COMMIT COMMIT TRAN statement
SQL_DIAG_DFC_SS_TRANS_PREPARE Prepare to commit a distributed transaction
SQL_DIAG_DFC_SS_TRANS_ROLLBACK ROLLBACK TRAN statement
SQL_DIAG_DFC_SS_TRANS_SAVE SAVE TRAN statement
SQL_DIAG_DFC_SS_TRUNCATE_TABLE TRUNCATE TABLE statement
SQL_DIAG_DFC_SS_UPDATE_STATISTICS UPDATE STATISTICS statement
SQL_DIAG_DFC_SS_UPDATETEXT UPDATETEXT statement
SQL_DIAG_DFC_SS_USE USE statement
SQL_DIAG_DFC_SS_WAITFOR WAITFOR control-of-flow statement
SQL_DIAG_DFC_SS_WRITETEXT WRITETEXT statement

SQLGetDiagField and Table-Valued Parameters

SQLGetDiagField can be used to retrieve two diagnostic fields: SQL_DIAG_SS_TABLE_COLUMN_NUMBER and SQL_DIAG_SS_TABLE_ROW_NUMBER. These fields help you determine which value caused the error or warning associated with the diagnostic record.

For more information about table-valued parameters, see Table-Valued Parameters (ODBC).

See Also

SQLGetDiagField Function
ODBC API Implementation Details