다음을 통해 공유


SQLDescribeParam

SQL 문의 매개 변수를 설명하기 위해 SQL Server Native Client ODBC 드라이버는 준비된 ODBC 문 핸들에서 SQLDescribeParam이 호출될 때 Transact-SQL SELECT 문을 작성하여 실행합니다. 드라이버는 쿼리를 실행할 때 SET FMTONLY 문을 사용합니다. 결과 집합의 메타데이터에 따라 준비된 문의 매개 변수 특징이 결정됩니다.

다음 ODBC SQL 문을 고려해 보십시오.

INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES (?, ?, ?)

SQLDescribeParam을 호출할 때 이 ODBC SQL 문을 사용하면 드라이버에서 다음 Transact-SQL 문을 실행합니다.

SET FMTONLY ON
SELECT ShipperID, CompanyName, Phone FROM Shippers
SET FMTONLY OFF

따라서 SQLDescribeParamSQLExecute 또는 SQLExecDirect에서 반환할 수 있는 모든 오류 코드를 반환합니다.

또한 드라이버는 다음과 같은 경우 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)을 참조하십시오.