큰 CLR 사용자 정의 형식(ODBC)
이 항목에서는 큰 CLR(공용 언어 런타임) UDT(사용자 정의 형식)를 지원하기 위한 SQL Server Native Client의 ODBC 변경 내용에 대해 설명합니다.
SQL Server Native Client의 큰 CLR UDT 지원에 대한 자세한 내용은 큰 CLR 사용자 정의 형식을 참조하십시오.
데이터 형식
SQL Server Native Client는 SQL_SS_LENGTH_UNLIMITED를 사용하여 LOB(Large Object) 형식에 대해 8,000바이트 이상인 열의 크기를 나타냅니다. SQL Server 2008부터 크기가 8,000바이트보다 큰 CLR UDT에도 같은 값이 사용됩니다.
UDT 값은 바이트 배열로 나타납니다. 16진수 문자열로의 변환 및 그 반대의 변환이 지원됩니다. 리터럴 값은 접두사 "0x"를 사용하여 16진수 문자열로 나타납니다.
다음 표에서는 매개 변수 및 결과 집합의 데이터 형식 매핑을 보여 줍니다.
SQL Server 데이터 형식 |
SQL 데이터 형식 |
값 |
---|---|---|
CLR UDT |
SQL_SS_UDT |
-151(sqlncli.h) |
다음 표에서는 해당되는 구조 및 ODBC C 형식을 보여 줍니다. 기본적으로 CLR UDT는 추가적인 메타데이터가 있는 varbinary 형식입니다.
SQL 데이터 형식 |
메모리 레이아웃 |
C 데이터 형식 |
값(sqlext.h) |
---|---|---|---|
SQL_SS_UDT |
SQLCHAR *(unsigned char *) |
SQL_C_BINARY |
SQL_BINARY (-2) |
매개 변수의 설명자 필드
IPD 필드에 반환되는 정보는 다음과 같습니다.
설명자 필드 |
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
---|---|---|
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE |
0 |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LOCAL_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE |
0 |
0 |
SQL_DESC_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_UNSIGNED |
SQL_TRUE |
SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME |
UDT가 포함된 카탈로그의 이름입니다. |
UDT가 포함된 카탈로그의 이름입니다. |
SQL_CA_SS_UDT_SCHEMA_NAME |
UDT가 포함된 스키마의 이름입니다. |
UDT가 포함된 스키마의 이름입니다. |
SQL_CA_SS_UDT_TYPE_NAME |
UDT의 이름입니다. |
UDT의 이름입니다. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME |
UDT의 정규화된 이름입니다. |
UDT의 정규화된 이름입니다. |
UDT 매개 변수의 경우 SQL_CA_SS_UDT_TYPE_NAME은 항상 SQLSetDescField를 통해 설정해야 합니다. SQL_CA_SS_UDT_CATALOG_NAME 및 SQL_CA_SS_UDT_SCHEMA_NAME은 선택 사항입니다.
UDT가 테이블과 다른 스키마가 있는 동일한 데이터베이스에 정의되어 있으면 SQL_CA_SS_UDT_SCHEMA_NAME을 설정해야 합니다.
UDT가 테이블과 다른 데이터베이스에 정의되어 있으면 SQL_CA_SS_UDT_CATALOG_NAME 및 SQL_CA_SS_UDT_SCHEMA_NAME을 설정해야 합니다.
SQL_CA_SS_UDT_TYPE_NAME, SQL_CA_SS_UDT_CATALOG_NAME 또는 SQL_CA_SS_UDT_SCHEMA_NAME에 대한 설정에 오류나 누락이 있으면 SQLSTATE HY000 및 서버 관련 메시지 텍스트가 있는 진단 레코드가 생성됩니다.
결과의 설명자 필드
IRD 필드에 반환되는 정보는 다음과 같습니다.
설명자 필드 |
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE |
0 |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_DISPLAY_SIZE |
2n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LITERAL_PREFIX |
"0x" |
"0x" |
SQL_DESC_LITERAL_SUFFIX |
"" |
"" |
SQL_DESC_LOCAL_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE |
0 |
0 |
SQL_DESC_SEARCHABLE |
SQL_PRED_NONE |
SQL_PRED_NONE |
SQL_DESC_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_UNSIGNED |
SQL_TRUE |
SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME |
UDT가 포함된 카탈로그의 이름입니다. |
UDT가 포함된 카탈로그의 이름입니다. |
SQL_CA_SS_UDT_SCHEMA_NAME |
UDT가 포함된 스키마의 이름입니다. |
UDT가 포함된 스키마의 이름입니다. |
SQL_CA_SS_UDT_TYPE_NAME |
UDT의 이름입니다. |
UDT의 이름입니다. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME |
UDT의 정규화된 이름입니다. |
UDT의 정규화된 이름입니다. |
SQLColumns 및 SQLProcedureColumns가 반환하는 열 메타데이터(카탈로그 메타데이터)
UDT에 대해 다음 열 값이 반환됩니다.
열 이름 |
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
---|---|---|
DATA_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
TYPE_NAME |
UDT의 이름입니다. |
UDT의 이름입니다. |
COLUMN_SIZE |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
BUFFER_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
DECIMAL_DIGITS |
NULL |
NULL |
SQL_DATA_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DATETIME_SUB |
NULL |
NULL |
CHAR_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SS_UDT_CATALOG_NAME |
UDT가 포함된 카탈로그의 이름입니다. |
UDT가 포함된 카탈로그의 이름입니다. |
SS_UDT_SCHEMA_NAME |
UDT가 포함된 스키마의 이름입니다. |
UDT가 포함된 스키마의 이름입니다. |
SS_UDT_ASSEMBLY_TYPE_NAME |
UDT의 정규화된 이름입니다. |
UDT의 정규화된 이름입니다. |
마지막 세 개의 열은 드라이버 관련 열입니다. 이러한 열은 ODBC 정의 열 이후, SQLColumns 또는 SQLProcedureColumns 결과 집합의 기존 드라이버 관련 열 이전에 추가됩니다.
개별 UDT 또는 일반 유형 "udt"의 경우 SQLGetTypeInfo에서 행이 반환되지 않습니다.
바인딩 및 변환
SQL에서 C 데이터 형식으로 지원되는 변환은 다음과 같습니다.
변환 원본 및 대상 |
SQL_SS_UDT |
---|---|
SQL_C_WCHAR |
지원됨 * |
SQL_C_BINARY |
지원됨 |
SQL_C_CHAR |
지원됨 * |
* 이진 데이터에서 16진수 문자열로 변환됩니다.
C에서 SQL 데이터 형식으로 지원되는 변환은 다음과 같습니다.
변환 원본 및 대상 |
SQL_SS_UDT |
---|---|
SQL_C_WCHAR |
지원됨 * |
SQL_C_BINARY |
지원됨 |
SQL_C_CHAR |
지원됨 * |
* 16진수 문자열에서 이진 데이터로 변환됩니다.
UDT에 대한 SQL_VARIANT 지원
UDT는 SQL_VARIANT 열에서 지원되지 않습니다.
UDT에 대한 BCP 지원
UDT 값은 문자나 이진 값으로만 가져오고 내보낼 수 있습니다.
UDT에 대한 하위 수준 클라이언트 동작
UDT에 적용되는 하위 수준 클라이언트와의 유형 매핑은 다음과 같습니다.
서버 버전 |
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
---|---|---|
SQL Server 2000 |
varbinary |
image |
SQL Server 2005 |
UDT |
varbinary(max) |
SQL Server 2008 |
UDT |
UDT |
큰 CLR UDT를 지원하는 ODBC 함수
이 섹션에서는 큰 CLR UDT를 지원하는 SQL Server Native Client ODBC 함수의 변경 내용에 대해 설명합니다.
SQLBindCol
UDT 결과 열 값은 이 항목의 앞부분에 있는 "바인딩 및 변환" 섹션에서 설명한 것처럼 SQL에서 C 데이터 형식으로 변환됩니다.
SQLBindParameter
UDT에 필요한 값은 다음과 같습니다.
SQL 데이터 형식 |
Parametertype |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLColAttribute
UDT에 대해 반환되는 값은 이 항목의 앞부분에 있는 "결과의 설명자 필드" 섹션에 설명되어 있습니다.
SQLColumns
UDT에 대해 반환되는 값은 이 항목의 앞부분에 있는 "SQLColumns 및 SQLProcedureColumns가 반환하는 열 메타데이터(카탈로그 메타데이터)" 섹션에 설명되어 있습니다.
SQLDescribeCol
UDT에 대해 반환되는 값은 다음과 같습니다.
SQL 데이터 형식 |
DataTypePtr |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLDescribeParam
UDT에 대해 반환되는 값은 다음과 같습니다.
SQL 데이터 형식 |
DataTypePtr |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLFetch
UDT 결과 열 값은 이 항목의 앞부분에 있는 "바인딩 및 변환" 섹션에서 설명한 것처럼 SQL에서 C 데이터 형식으로 변환됩니다.
SQLFetchScroll
UDT 결과 열 값은 이 항목의 앞부분에 있는 "바인딩 및 변환" 섹션에서 설명한 것처럼 SQL에서 C 데이터 형식으로 변환됩니다.
SQLGetData
UDT 결과 열 값은 이 항목의 앞부분에 있는 "바인딩 및 변환" 섹션에서 설명한 것처럼 SQL에서 C 데이터 형식으로 변환됩니다.
SQLGetDescField
새 형식과 함께 사용할 수 있는 설명자 필드는 이 항목의 앞부분에 있는 "매개 변수의 설명자 필드" 및 "결과의 설명자 필드" 섹션에 설명되어 있습니다.
SQLGetDescRec
UDT에 대해 반환되는 값은 다음과 같습니다.
SQL 데이터 형식 |
유형 |
하위 유형 |
Length |
Precision |
Scale |
---|---|---|---|---|---|
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT |
0 |
n |
n |
0 |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
SQL_SS_UDT |
0 |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLGetTypeInfo
UDT에 대해 반환되는 값은 이 항목의 앞부분에 있는 "SQLColumns 및 SQLProcedureColumns가 반환하는 열 메타데이터(카탈로그 메타데이터)" 섹션에 설명되어 있습니다.
SQLProcedureColumns
UDT에 대해 반환되는 값은 이 항목의 앞부분에 있는 "SQLColumns 및 SQLProcedureColumns가 반환하는 열 메타데이터(카탈로그 메타데이터)" 섹션에 설명되어 있습니다.
SQLPutData
UDT 매개 변수 값은 이 항목의 앞부분에 있는 "바인딩 및 변환" 섹션에서 설명한 것처럼 C에서 SQL 데이터 형식으로 변환됩니다.
SQLSetDescField
새 형식과 함께 사용할 수 있는 설명자 필드는 이 항목의 앞부분에 있는 "매개 변수의 설명자 필드" 및 "결과의 설명자 필드" 섹션에 설명되어 있습니다.
SQLSetDescRec
UDT에 허용되는 값은 다음과 같습니다.
SQL 데이터 형식 |
유형 |
하위 유형 |
Length |
Precision |
Scale |
---|---|---|---|---|---|
SQL_SS_UDT (8,000바이트 이하 길이) |
SQL_SS_UDT |
0 |
n |
n |
0 |
SQL_SS_UDT (8,000바이트를 초과하는 길이) |
SQL_SS_UDT |
0 |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLSpecialColumns
DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH 및 DECIMAL_DIGTS UDT 열에 대해 반환되는 값은 이 항목의 앞부분에 있는 "SQLColumns 및 SQLProcedureColumns가 반환하는 열 메타데이터(카탈로그 메타데이터)" 섹션에 설명되어 있습니다.