Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le pilote ODBC SQL Server Native Client expose uniquement les champs de descripteur spécifiques au pilote pour le descripteur de ligne d’implémentation (IRD). Dans l’IRD, les champs de descripteur SQL Server sont référencés par le biais d’attributs de colonne spécifiques au pilote. Pour plus d’informations sur la liste complète des champs de descripteur spécifiques au pilote disponibles, consultez SQLColAttribute.
Les champs de descripteur qui contiennent des chaînes d’identificateur de colonne sont souvent des chaînes de longueur nulle. Toutes les valeurs de champ de descripteur spécifiques à SQL Server sont en lecture seule.
Comme les attributs récupérés avec SQLColAttribute, les champs de descripteur qui signalent des attributs au niveau des lignes (tels que SQL_CA_SS_COMPUTE_ID) sont signalés pour toutes les colonnes du jeu de résultats.
Paramètres SQLGetDescField et Table-Valued
SQLGetDescField peut être utilisé pour obtenir des valeurs pour les attributs étendus des paramètres table et des colonnes de paramètres table. Pour plus d’informations sur les paramètres table, consultez Paramètres table (ODBC) .
Prise en charge de SQLGetDescField pour les fonctionnalités de date et d’heure améliorées
Pour plus d’informations sur les champs de descripteur disponibles avec les nouveaux types date/heure, consultez Métadonnées de paramètre et de résultat.
Pour plus d’informations, consultez Améliorations de date et d’heure (ODBC).
À compter de SQL Server 2012, SQLGetDescField peut retourner SQL_C_SS_TIME2 (pour time les types) ou SQL_C_SS_TIMESTAMPOFFSET (pour datetimeoffset) au lieu de SQL_C_BINARY, si votre application utilise ODBC 3.8.
Prise en charge de SQLGetDescField pour les UDT CLR volumineux
SQLGetDescField prend en charge les types clR définis par l’utilisateur (UDT). Pour plus d’informations, consultez Les types CLR définis par l’utilisateur (ODBC) volumineux.
Prise en charge de SQLGetDescField pour les colonnes éparses
SQLGetDescField peut être utilisé pour interroger le nouveau champ IRD SQL_CA_SS_IS_COLUMN_SET pour déterminer si une colonne est une column_set colonne.
Pour plus d’informations, consultez La prise en charge des colonnes éparses (ODBC).
Exemple :
typedef struct tagCOMPUTEBYLIST
{
SQLSMALLINT nBys;
SQLSMALLINT aByList[1];
} COMPUTEBYLIST;
typedef COMPUTEBYLIST* PCOMPUTEBYLIST;
SQLHDESC hIRD;
SQLINTEGER cbIRD;
SQLINTEGER nSet = 0;
// . . .
// Execute a statement that contains a COMPUTE clause,
// then get the descriptor handle of the IRD and
// get some IRD values.
SQLGetStmtAttr(g_hStmt, SQL_ATTR_IMP_ROW_DESC,
(SQLPOINTER) &hIRD, sizeof(SQLHDESC), &cbIRD);
// For statement-wide column attributes, any
// descriptor record will do. You know that 1 exists,
// so use it.
SQLGetDescField(hIRD, 1, SQL_CA_SS_NUM_COMPUTES,
(SQLPOINTER) &nComputes, SQL_IS_INTEGER, &cbIRD);
if (nSet == 0)
{
SQLINTEGER nOrderID;
printf_s("Normal result set.\n");
for (nCol = 0; nCol < nCols; nCol++)
{
SQLGetDescField(hIRD, nCol+1,
SQL_CA_SS_COLUMN_ORDER,
(SQLPOINTER) &nOrderID, SQL_IS_INTEGER,
&cbIRD);
if (nOrderID != 0)
{
printf_s("Col in ORDER BY, pos: %ld",
nOrderID);
}
printf_s("\n");
}
printf_s("\n");
}
else
{
PCOMPUTEBYLIST pByList;
SQLSMALLINT nBy;
SQLINTEGER nColID;
printf_s("Computed result set number: %lu\n",
nSet);
SQLGetDescField(hIRD, 1, SQL_CA_SS_COMPUTE_BYLIST,
(SQLPOINTER) &pByList, SQL_IS_INTEGER,
&cbIRD);
if (pByList != NULL)
{
printf_s("Clause ordered by columns: ");
for (nBy = 0; nBy < pByList->nBys; )
{
printf_s("%u", pByList->aByList[nBy]);
nBy++;
if (nBy == pByList->nBys)
{
printf_s("\n");
}
else
{
printf_s(", ");
}
}
}
else
{
printf_s("Compute clause set not ordered.\n");
}
for (nCol = 0; nCol < nCols; nCol++)
{
SQLGetDescField(hIRD, nCol+1,
SQL_CA_SS_COLUMN_ID, (SQLPOINTER) &nColID,
SQL_IS_INTEGER, &cbIRD);
printf_s("ColumnID: %lu, nColID);
}
printf_s("\n");
}
if (SQLMoreResults(g_hStmt) == SQL_SUCCESS)
{
// Determine the result set indicator.
SQLGetDescField(hIRD, 1, SQL_CA_SS_COMPUTE_ID,
(SQLPOINTER) &nSet, SQL_IS_INTEGER, &cbIRD);
}
Voir aussi
fonction SQLGetDescField
Détails de l’implémentation d’API ODBC