SQLColAttribute supports several Teradata ODBC driver-defined column attributes as the FieldIdentifier argument. Additionally, using SQL_COLUMN_NAME returns the Teradata TITLE (if available) instead of the name because this makes most report writers work more sensibly.
When using SQLColAttribute to obtain driver-defined attribute values the type of the
attribute must be specified in the BufferLength argument. In addition, SQLColAttribute returns the value through one of two pointers depending on the type: Integer information
is returned in *NumericAttributePtr
as a SQLLEN
value; all other formats of information are returned in *CharacterAttributePtr
. The pointer not being used for a particular attribute should be set to NULL in the call. For example, to obtain the value of the attribute SQL_DESC_TD_ODBC_TYPE:
rc = SQLColAttribute(hstmt, colno, SQL_DESC_TD_ODBC_TYPE, NULL, SQL_IS_SMALLINT, NULL, &NumAttrPtr);
The pointer used for each of the attributes defined by the Teradata ODBC driver is indicated in the list below.
Driver-defined FieldIdentifier values are:
For additional information about these attributes, see “SQL Descriptor Fields” on page 103.
When Making SQLColAttribute Calls
For an ANSI application (that is, compiled without UNICODE defined), the Driver Manager on the UNIX OS will not convert:
Because of this, the output parameters from SQLColAttribute are delivered back to the ANSI application in the internal character set used by the driver. If the internal character set is different from the application code page, the application receives data back from SQLColAttribute in a different character set from what was expected.
This is a problem if, for example, an ANSI application using ISO 8859-1 requests non-ASCII meta data (such as a column name with Danish characters) and the session character set is UTF-8. The application gets the column name back in UTF-8. In general, if an ANSI application uses a Unicode session character set, it gets data back from SQLColAttribute in UTF-8, regardless of the application code page.
To avoid this problem, use the old SQLColAttributes function (with an 's' at the end).