SQLDescribeParam
SQL 문의 매개 변수를 설명하기 위해 SQL Server Native Client ODBC 드라이버는 준비된 ODBC 문 핸들에서 SQLDescribeParam이 호출될 때 Transact-SQL SELECT 문을 작성하여 실행합니다. 결과 집합의 메타데이터에 따라 준비된 문의 매개 변수 특징이 결정됩니다. SQLDescribeParam은 SQLExecute 또는 SQLExecDirect에서 반환할 수 있는 오류 코드를 반환할 수 있습니다.
SQL Server 2012부터 데이터베이스 엔진의 기능이 향상되어 SQLDescribeParam을 통해 예상 결과에 대한 보다 정확한 설명을 얻을 수 있습니다. 이러한 보다 정확한 결과는 이전 버전의 SQL Server에서 SQLDescribeParam이 반환한 값과 다를 수 있습니다. 자세한 내용은 메타데이터 검색을 참조하십시오.
또한 SQL Server 2012에서 새로워진 ParameterSizePtr은 이제 ODBC 사양에 정의된 대로 해당 매개 변수 표식의 열 또는 식 크기(문자 수)에 대한 정의를 사용하여 정렬되는 값을 반환합니다. 이전 버전의 SQL ServerNative Client에서 ParameterSizePtr은 해당 형식의 SQL_DESC_OCTET_LENGTH에 해당하는 값이거나, 무시해야 하는 값(예: SQL_INTEGER)을 갖는 형식의 SQLBindParameter에 제공된 관련 없는 열 크기 값일 수 있었습니다.
드라이버는 다음과 같은 경우 SQLDescribeParam 호출을 지원하지 않습니다.
FROM 절이 포함된 Transact-SQL UPDATE 또는 DELETE 문에 대한 SQLExecDirect 후
HAVING 절에 매개 변수를 포함하거나 SUM 함수 결과와 비교되는 ODBC 또는 Transact-SQL 문의 경우
매개 변수가 포함된 하위 쿼리를 사용하는 ODBC 또는 Transact-SQL 문의 경우
정량화된 조건자 또는 비교 like의 두 식에 모두 매개 변수 표식이 포함된 ODBC SQL 문의 경우
매개 변수 중 하나가 함수에 대한 매개 변수인 쿼리의 경우
Transact-SQL 명령에 주석(/* */)이 있는 경우
또한 Transact-SQL 문을 일괄 처리하는 경우 드라이버는 일괄 처리의 첫 번째 문 다음에 나오는 문의 매개 변수 표식에 대해 SQLDescribeParam 호출을 지원하지 않습니다.
준비된 저장 프로시저의 매개 변수를 설명할 때 SQLDescribeParam은 시스템 저장 프로시저 sp_sproc_columns를 사용하여 매개 변수 특징을 검색합니다. sp_sproc_columns는 현재 사용자 데이터베이스 내의 저장 프로시저 데이터를 보고할 수 있습니다. 정규화된 저장 프로시저 이름을 준비하면 SQLDescribeParam이 여러 데이터베이스에서 실행될 수 있습니다. 예를 들어 시스템 저장 프로시저 sp_who를 다음과 같이 준비하여 실행할 수 있습니다.
SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);
준비에 성공한 후 SQLDescribeParam을 실행하면 master 이외의 데이터베이스에 연결되어 있는 경우 빈 행 집합이 반환됩니다. 동일한 호출을 다음과 같이 준비하여 사용하면 현재 사용자 데이터베이스에 관계없이 SQLDescribeParam이 성공합니다.
SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);
큰 값 데이터 형식의 경우 DataTypePtr에서 반환되는 값은 SQL_VARCHAR, SQL_VARBINARY 또는 SQL_NVARCHAR입니다. 큰 값 데이터 형식 매개 변수의 크기를 “제한 없음”으로 표시하려는 경우 SQL Server Native Client ODBC 드라이버는 ParameterSizePtr을 0으로 설정합니다. 표준 varchar 매개 변수에 대해서는 실제 크기 값이 반환됩니다.
[!참고]
매개 변수가 이미 SQL_VARCHAR, SQL_VARBINARY 또는 SQL_WVARCHAR 매개 변수의 최대 크기와 바인딩되어 있으면 "제한 없음"이 아니라 매개 변수의 바인딩된 크기가 반환됩니다.
"제한 없음" 크기 입력 매개 변수를 바인딩하려면 실행 시 데이터를 사용해야 합니다. "제한 없음" 크기 출력 매개 변수는 바인딩할 수 없습니다. SQLGetData가 결과 집합에 대해 수행하는 것처럼 출력 매개 변수에서 데이터를 스트리밍하기 위한 메서드가 없습니다.
출력 매개 변수의 경우 버퍼를 바인딩해야 하며, 값이 너무 크면 버퍼가 채워지고 SQL_SUCCESS_WITH_INFO 메시지가 "문자열 데이터의 오른쪽이 잘렸습니다."라는 경고와 함께 반환됩니다. 잘린 데이터는 삭제됩니다.
SQLDescribeParam와 테이블 반환 매개 변수
응용 프로그램은 SQLDescribeParam을 사용하여 준비된 문에 대한 테이블 반환 매개 변수 정보를 검색할 수 있습니다. 자세한 내용은 준비된 문의 테이블 반환 매개 변수 메타데이터를 참조하십시오.
일반적인 테이블 반환 매개 변수에 대한 자세한 내용은 테이블 반환 매개 변수(ODBC)를 참조하십시오.
향상된 날짜 및 시간 기능에 대한 SQLDescribeParam 지원
날짜/시간 형식에 대해 반환되는 값은 다음과 같습니다.
DataTypePtr |
ParameterSizePtr |
DecimalDigitsPtr |
|
---|---|---|---|
datetime |
SQL_TYPE_TIMESTAMP |
23 |
3 |
smalldatetime |
SQL_TYPE_TIMESTAMP |
16 |
0 |
date |
SQL_TYPE_DATE |
10 |
0 |
time |
SQL_SS_TIME2 |
8, 10..16 |
0..7 |
datetime2 |
SQL_TYPE_TIMESTAMP |
19, 21..27 |
0..7 |
datetimeoffset |
SQL_SS_TIMESTAMPOFFSET |
26, 28..34 |
0..7 |
자세한 내용은 날짜/시간 기능 향상(ODBC)을 참조하십시오.
큰 CLR UDT에 대한 SQLDescribeParam 지원
SQLDescribeParam은 큰 CLR UDT(사용자 정의 형식)를 지원합니다. 자세한 내용은 큰 CLR 사용자 정의 형식(ODBC)을 참조하십시오.