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

적용 대상: 예SQL Server(지원되는 모든 버전) 예Azure SQL Database 예Azure SQL Managed Instance 예Azure Synapse Analytics 예병렬 데이터 웨어하우스

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

큰 CLR UDT에 대한 ODBC 지원을 보여주는 샘플은 큰 UDT 지원을 참조하세요.

SQL Server Native Client 큰 CLR UDT 지원에 대한 자세한 내용은 큰 CLR User-Defined 형식을 참조하세요.

데이터 형식

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 2 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_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 결과 집합의 기존 드라이버별 열 앞에 추가됩니다.

SQLGetTypeInfo, 개별 UDT 또는 제네릭 형식 "udt"에 대해 반환되는 행이 없습니다.

바인딩 및 변환

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 사용자 정의 형식