다음을 통해 공유


큰 CLR 사용자 정의 형식(OLE DB)

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

OLE DB 드라이버 다운로드

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

OLE DB Driver for SQL Server의 큰 CLR UDT 지원에 대한 자세한 정보는 큰 CLR 사용자 정의 형식을 참조하세요. 샘플은 큰 CLR UDT 사용(OLE DB)을 참조하세요.

데이터 형식

SQL Server용 OLE DB 드라이버는 ~0을 사용하여 LOB(Large Object) 형식에 대해 무제한 크기인 값의 길이를 나타냅니다. ~0은 8,000바이트보다 큰 CLR UDT 크기도 나타냅니다.

다음 표에서는 매개 변수 및 행 집합의 데이터 형식 매핑을 보여 줍니다.

SQL Server 데이터 형식 OLE DB 데이터 형식 메모리 레이아웃
CLR UDT DBTYPE_UDT BYTE[](바이트 배열) 132(oledb.h)

UDT 값은 바이트 배열로 나타납니다. 16진수 문자열로의 변환 및 그 반대의 변환이 지원됩니다. 리터럴 값은 접두사 "0x"를 사용하여 16진수 문자열로 나타납니다. 16진수 문자열은 밑수가 16인 이진 데이터의 텍스트 표현입니다. 예를 들어 서버 형식 varbinary(10) 를 DBTYPE_STR로 변환하는 경우 모든 문자 쌍이 단일 바이트를 나타내는 20자의 16진수 표현이 생성됩니다.

매개 변수 속성

DBPROPSET_SQLSERVERPARAMETER 속성 집합은 OLE DB를 통해 UDT를 지원합니다. 자세한 내용은 사용자 정의 형식 사용을 참조하세요.

열 속성

DBPROPSET_SQLSERVERCOLUMN 속성 집합은 OLE DB를 통해 테이블 만들기를 지원합니다. 자세한 내용은 사용자 정의 형식 사용을 참조하세요.

ITableDefinition::CreateTable의 데이터 형식 매핑

UDT 열이 필요한 경우 ITableDefinition::CreateTable에서 DBCOLUMNDESC 구조에 사용하는 정보는 다음과 같습니다.

OLE DB 데이터 형식(wType) pwszTypeName SQL Server 데이터 형식 rgPropertySets
DBTYPE_UDT 무시됨 UDT DBPROPSET_SQLSERVERCOLUMN 속성 집합을 포함해야 합니다.

ICommandWithParameters::GetParameterInfo

prgParamInfo를 통해 DBPARAMINFO 구조에 반환된 정보는 다음과 같습니다.

매개 변수 형식 wType ulParamSize bPrecision bScale dwFlags DBPARAMFLAGS_ISLONG
DBTYPE_UDT

(8,000바이트 이하 길이)
"DBTYPE_UDT" n 정의되지 않음 정의되지 않음 지우기
DBTYPE_UDT

(8,000바이트를 초과하는 길이)
"DBTYPE_UDT" ~0 정의되지 않음 정의되지 않음 set

ICommandWithParameters::SetParameterInfo

DBPARAMBINDINFO 구조에 제공된 정보는 다음을 준수해야 합니다.

매개 변수 형식 pwszDataSourceType ulParamSize bPrecision bScale dwFlags DBPARAMFLAGS_ISLONG
DBTYPE_UDT

(8,000바이트 이하 길이)
DBTYPE_UDT n 무시됨 무시됨 DBTYPE_IUNKNOWN을 사용하여 매개 변수가 전달되는 경우 설정해야 합니다.
DBTYPE_UDT

(8,000바이트를 초과하는 길이)
DBTYPE_UDT ~0 무시됨 무시됨 무시됨

ISSCommandWithParameters

애플리케이션에서 ISSCommandWithParameters를 사용하여 매개 변수 속성 섹션에서 정의된 매개 변수 속성을 가져오고 설정합니다.

IColumnsRowset::GetColumnsRowset

반환되는 열은 다음과 같습니다.

열 유형 DBCOLUMN_TYPE DBCOLUMN_COLUMNSIZE DBCOLUMN_PRECISION DBCOLUMN_SCALE DBCOLUMN_FLAGS_ISLONG DBCOLUMNS_ISSEARCHABLE DBCOLUMN_OCTETLENGTH
DBTYPE_UDT

(8,000바이트 이하 길이)
DBTYPE_UDT n NULL NULL 지우기 DB_ALL_EXCEPT_LIKE n
DBTYPE_UDT

(8,000바이트를 초과하는 길이)
DBTYPE_UDT ~0 NULL NULL 설정 DB_ALL_EXCEPT_LIKE 0

UDT에 대해 다음 열도 정의됩니다.

열 식별자 Type Description
DBCOLUMN_UDT_CATALOGNAME DBTYPE_WSTR UDT 열의 경우 UDT가 정의된 카탈로그의 이름입니다.
DBCOLUMN_UDT_SCHEMANAME DBTYPE_WSTR UDT 열의 경우 UDT가 정의된 스키마의 이름입니다.
DBCOLUMN_UDT_NAME DBTYPE_WSTR UDT 열의 경우 UDT의 단일 부분 이름입니다.
DBCOLUMN_ASSEMBLY_TYPENAME DBTYPE_WSTR UDT 열의 경우 UDT의 전체 유형 이름입니다. 어셈블리 유형의 정규화된 이름을 사용하면 Type.GetType 메서드를 사용하여 해당 유형의 개체를 인스턴스화할 수 있습니다.

IColumnsInfo::GetColumnInfo

DBCOLUMNINFO 구조에 반환되는 정보는 다음과 같습니다.

매개 변수 형식 wType ulColumnSize bPrecision bScale dwFlags

DBCOLUMNFLAGS_ISLONG
DBTYPE_UDT

(8,000바이트 이하 길이)
DBTYPE_UDT n ~0 ~0 지우기
DBTYPE_UDT

(8,000바이트를 초과하는 길이)
DBTYPE_UDT ~0 ~0 ~0 설정

COLUMNS 행 집합(스키마 행 집합)

UDT 유형에 대해 다음 열 값이 반환됩니다.

열 유형 DATA_TYPE COLUMN_FLAGS, DBCOLUMFLAGS_ISLONG CHARACTER_OCTET_LENGTH
DBTYPE_UDT

(8,000바이트 이하 길이)
DBTYPE_UDT 지우기 n
DBTYPE_UDT

(8,000바이트를 초과하는 길이)
DBTYPE_UDT 설정 0

UDT에 대해 다음 추가 열이 정의됩니다.

열 식별자 Type Description
SS_UDT_CATALOGNAME DBTYPE_WSTR UDT 열의 경우 UDT가 정의된 카탈로그의 이름입니다.
SS_UDT_SCHEMANAME DBTYPE_WSTR UDT 열의 경우 UDT가 정의된 스키마의 이름입니다.
SS_UDT_NAME DBTYPE_WSTR UDT 열의 경우 UDT의 단일 부분 이름입니다.
SS_ASSEMBLY_TYPENAME DBTYPE_WSTR UDT 열의 경우 UDT의 전체 유형 이름입니다. 어셈블리 유형의 정규화된 이름을 사용하면 Type.GetType 메서드를 사용하여 해당 유형의 개체를 인스턴스화할 수 있습니다.

PROCEDURE_PARAMETERS 행 집합과 관련해서 DATA_TYPE에는 COLUMNS 스키마 행 집합과 동일한 값이 포함되고 TYPE_NAME에는 UDT가 포함됩니다. 동일한 추가 열도 정의됩니다.

PROVIDER_TYPES 스키마 행 집합에는 사용자 정의 형식이 나타나지 않습니다.

바인딩 및 변환

바인딩 데이터 형식 UDT에서 서버로 비 UDT에서 서버로 서버에서 UDT로 서버에서 비 UDT로
DBTYPE_UDT 지원됨 (5) 오류 (1) 지원됨 (5) 오류 (4)
DBTYPE_BYTES 지원됨 (5) 해당 없음 지원됨 (5) 해당 없음
DBTYPE_WSTR 지원됨 (2), (5) 해당 없음 지원됨 (3), (5), (6) 해당 없음
DBTYPE_BSTR 지원됨 (2), (5) 해당 없음 지원됨 (3), (5) 해당 없음
DBTYPE_STR 지원됨 (2), (5) 해당 없음 지원됨 (3), (5) 해당 없음
DBTYPE_IUNKNOWN 지원됨 (6) 해당 없음 지원됨 (6) 해당 없음
DBTYPE_VARIANT (VT_UI1 | VT_ARRAY) 지원됨 (5) 해당 없음 지원됨 (3), (5) 해당 없음
DBTYPE_VARIANT (VT_BSTR) 지원됨 (2), (5) 해당 없음 해당 없음 해당 없음

기호 설명

기호 의미
1 DBTYPE_UDT와는 다른 서버 유형이 ICommandWithParameters::SetParameterInfo를 사용하여 지정되고 접근자 유형이 DBTYPE_UDT인 경우 문을 실행하면 오류가 발생합니다. 오류는 DB_E_ERRORSOCCURRED이고 매개 변수 상태는 DBSTATUS_E_BADACCESSOR가 됩니다.

UDT가 아닌 서버 매개 변수에 대해 UDT 유형의 매개 변수를 지정하는 것은 오류입니다.
2 데이터가 16진수 문자열에서 이진 데이터로 변환됩니다.
3 데이터가 이진 데이터에서 16진수 문자열로 변환됩니다.
4 CreateAccessor 또는 GetNextRows를 사용할 때 유효성 검사가 수행될 수 있습니다. 오류는 DB_E_ERRORSOCCURRED이고 바인딩 상태는 DBBINDSTATUS_UNSUPPORTEDCONVERSION으로 설정됩니다.
5 BY_REF가 사용될 수 있습니다.
6 UDT 매개 변수를 DBBINDING의 DBTYPE_IUNKNOWN으로 바인딩할 수 있습니다. DBTYPE_IUNKNOWN으로 바인딩할 경우 애플리케이션이 ISequentialStream 인터페이스를 사용하여 데이터를 스트림으로 처리하려는 것을 나타냅니다. 소비자가 바인딩의 wType을 DBTYPE_IUNKNOWN 형식으로 지정하고 저장된 프로시저의 해당 열 또는 출력 매개 변수가 UDT이면 OLE DB Driver for SQL Server에서 ISequentialStream을 반환합니다. 입력 매개 변수의 경우 OLE DB Driver for SQL Server에서는 ISequentialStream 인터페이스를 쿼리합니다.

큰 UDT의 경우 DBTYPE_IUNKNOWN 바인딩을 사용하는 동안 UDT 데이터의 길이를 바인딩하지 않도록 선택할 수 있습니다. 하지만 작은 UDT의 경우에는 길이를 바인딩해야 합니다. 다음 중 하나 이상이 True이면 DBTYPE_UDT 매개 변수를 큰 UDT로 지정할 수 있습니다.
ulParamParamSize는 ~0입니다.
DBPARAMBINDINFO 구조체에 DBPARAMFLAGS_ISLONG이 설정되어 있습니다.

행 데이터의 경우 DBTYPE_IUNKNOWN 바인딩만 큰 UDT에 사용할 수 있습니다. Rowset 또는 Command 개체의 IColumnsInfo 인터페이스에서 IColumnsInfo::GetColumnInfo 메서드를 사용하여 열이 큰 UDT 형식인지 확인할 수 있습니다. 다음 중 하나 이상이 True이면 DBTYPE_UDT 열은 큰 UDT 열입니다.
DBCOLUMNFLAGS_ISLONG 플래그가 DBCOLUMNINFO 구조의 dwFlags 멤버에 설정되어 있습니다.
DBCOLUMNINFO의 ulColumnSize 구성원은 ~0입니다.

DBTYPE_NULL 및 DBTYPE_EMPTY는 입력 매개 변수에 대해서는 바인딩할 수 있지만 출력 매개 변수나 결과에 대해서는 바인딩할 수 없습니다. 입력 매개 변수에 대해 바인딩할 경우 DBTYPE_NULL을 나타내는 DBSTATUS_S_ISNULL 또는 DBTYPE_EMPTY를 나타내는 DBSTATUS_S_DEFAULT로 상태를 설정해야 합니다. DBTYPE_BYREF는 DBTYPE_NULL 또는 DBTYPE_EMPTY에 사용할 수 없습니다.

DBTYPE_UDT를 DBTYPE_EMPTY 및 DBTYPE_NULL로 변환할 수도 있습니다. 하지만 DBTYPE_NULL 및 DBTYPE_EMPTY를 DBTYPE_UDT로 변환할 수는 없습니다. 이는 DBTYPE_BYTES와 일치합니다. ISSCommandWithParameters는 UDT를 매개 변수로 처리하는 데 사용됩니다.

OLE DB 핵심 서비스(IDataConvert)에서 제공하는 데이터 변환은 DBTYPE_UDT에는 적용되지 않습니다.

다른 바인딩은 지원되지 않습니다.

IRowsetFind 비교

UDT 유형의 경우 다음과 같은 비교만 지원됩니다.

  • EQ

  • NE

  • IGNORE

다른 비교를 시도하면 DB_E_BADCOMPAREOP가 반환됩니다.

UDT에 대한 BCP 지원

UDT 값은 문자나 이진 값으로만 가져오고 내보낼 수 있습니다.

UDT에 대한 하위 수준 클라이언트 동작

UDT에 적용되는 하위 수준 클라이언트와의 유형 매핑은 다음과 같습니다.

클라이언트 버전 DBTYPE_UDT

(8,000바이트 이하 길이)
DBTYPE_UDT

(8,000바이트를 초과하는 길이)
SQL Server 2005 UDT varbinary(max)
SQL Server 2008 이상 UDT UDT

DataTypeCompatibility(SSPROP_INIT_DATATYPECOMPATIBILITY)를 "80"으로 설정하면 큰 UDT 유형이 하위 수준 클라이언트에 대해 표시되는 것과 동일한 방식으로 클라이언트에 표시됩니다.

참고 항목

큰 CLR 사용자 정의 형식