SQLGetDescField
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
SQL Server Native Client ODBC 드라이버는 IRD(구현 행 설명자)에 대해서만 드라이버별 설명자 필드를 노출합니다. IRD 내에서 SQL Server 설명자 필드는 드라이버별 열 특성을 통해 참조됩니다. 사용 가능한 드라이버별 설명자 필드의 전체 목록에 대한 자세한 내용은 SQLColAttribute를 참조 하세요.
열 식별자 문자열을 포함하는 설명자 필드는 종종 길이가 0인 문자열입니다. 모든 SQL Server 관련 설명자 필드 값은 읽기 전용입니다.
SQLColAttribute를 사용하여 검색된 특성과 마찬가지로 행 수준 특성(예: SQL_CA_SS_COMPUTE_ID)을 보고하는 설명자 필드는 결과 집합의 모든 열에 대해 보고됩니다.
SQLGetDescField 및 테이블 반환 매개 변수
SQLGetDescField를 사용하여 테이블 반환 매개 변수 및 테이블 반환 매개 변수 열의 확장 특성에 대한 값을 가져올 수 있습니다. 테이블 반환 매개 변수에 대한 자세한 내용은 ODBC(테이블 반환 매개 변수)를 참조하세요.
향상된 날짜 및 시간 기능에 대한 SQLGetDescField 지원
새로운 날짜/시간 형식에 사용할 수 있는 설명자 필드에 대한 자세한 내용은 Parameter and Result Metadata를 참조하십시오.
자세한 내용은 날짜 및 시간 개선 사항(ODBC)을 참조하세요.
SQL Server 2012(11.x)부터 애플리케이션이 ODBC 3.8을 사용하는 경우 SQLGetDescField는 SQL_C_BINARY 대신 SQL_C_SS_TIME2(시간 형식의 경우) 또는 SQL_C_SS_TIMESTAMPOFFSET(datetimeoffset의 경우)를 반환할 수 있습니다.
큰 CLR UDT에 대한 SQLGetDescField 지원
SQLGetDescField 는 큰 CLR UDT(사용자 정의 형식)를 지원합니다. 자세한 내용은 ODBC(큰 CLR 사용자 정의 형식)를 참조하세요.
스파스 열에 대한 SQLGetDescField 지원
SQLGetDescField를 사용하여 새 IRD 필드 SQL_CA_SS_IS_COLUMN_SET 쿼리하여 열이 column_set 열인지 확인할 수 있습니다.
자세한 내용은 스파스 열 지원(ODBC)을 참조하세요.
예시
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);
}