큰 CLR 사용자 정의 형식(ODBC)

이 항목에서는 큰 CLR(공용 언어 런타임) UDT(사용자 정의 형식)를 지원하기 위한 SQL Server Native Client의 ODBC 변경 내용에 대해 설명합니다.

큰 CLR UDT에 대한 ODBC 지원을 보여 주는 예제는 큰 UDT에 대한 지원을 참조하십시오.

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 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 데이터 형식

유형

하위 유형

길이

전체 자릿수

배율

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 데이터 형식

유형

하위 유형

길이

전체 자릿수

배율

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가 반환하는 열 메타데이터(카탈로그 메타데이터)" 섹션에 설명되어 있습니다.

참고 항목

개념

큰 CLR 사용자 정의 형식