다음을 통해 공유


JetCreateTableColumnIndex4W 함수

적용 대상: Windows | Windows Server

JetCreateTableColumnIndex4W 함수는 초기 인덱스 집합과 JET_TABLECREATE3 구조 배열의 초기 열 집합이 있는 ESE(확장 가능한 스토리지 엔진) 데이터베이스에 테이블을 만듭니다. JET_TABLECREATE3 구조를 사용하면 콜백 함수를 지정할 수 있습니다.

JetCreateTableColumnIndex4W 함수는 Windows 8 운영 체제에 도입되었습니다.

JET_ERR JET_API JetCreateTableColumnIndex4W(
  __in          JET_SESID sesid,
  __in          JET_DBID dbid,
  __in_out      JET_TABLECREATE3* ptablecreate
);

매개 변수

sesid

API 호출에 사용할 데이터베이스 세션 컨텍스트입니다.

dbid

API 호출에 사용할 데이터베이스 식별자입니다.

ptablecreate

만들 테이블을 정의하는 JET_TABLECREATE3 구조체에 대한 포인터입니다. 자세한 내용은 JET_TABLECREATE3 참조하세요.

반환 값

이 함수는 다음 표에 나열된 반환 코드 중 하나를 사용하여 JET_ERR 데이터 형식을 반환합니다. 가능한 ESE(Extensible Storage Enginge) 오류에 대한 자세한 내용은 확장 가능한 스토리지 엔진 오류오류 처리 매개 변수를 참조하세요.

반환 코드

설명

JET_errSuccess

작업이 성공적으로 완료되었습니다.

JET_errCallbackNotResolved

콜백 함수를 확인할 수 없습니다. DLL을 찾을 수 없거나 DLL의 함수를 찾지 못했을 수 있습니다. 충분한 로깅을 사용하도록 설정하면 이벤트 로그에서 자세한 정보를 제공합니다.

JET_errCannotIndex

에스크로 업데이트 또는 SLV 열을 통해 인덱싱을 시도했습니다(SLV 열은 더 이상 사용되지 않음).

JET_errCannotNestDDL

ptablecreate-grbit> 매개 변수가 JET_bitTableCreateTemplateTable 값을 지정하지만 ptablecreate-szTemplateTableName> 매개 변수가 null로 설정된 경우 반환됩니다.

JET_errColumnDuplicate

열이 이미 있습니다.

JET_errColumnNotFound

존재하지 않는 열에 대해 인덱싱을 시도했습니다. 존재하지 않는 열을 조건부로 인덱싱하려고 하면 이 오류가 발생할 수도 있습니다.

JET_errColumnRedundant

중복 열을 추가하려고 했습니다. 자동 증가 열이 하나 이상 없어야 하며 테이블당 버전 열이 두 개 이상 없어야 합니다.

JET_errDensityInvalid

이 오류는 JET_INDEXCREATE2 구조체의 ulDensity 멤버가 20보다 작거나 100보다 큰 숫자로 설정된 경우 반환됩니다.

JET_errDDLNotInheritable

JET_TABLECREATE3 구조체의 szTemplateTableName 멤버에 이름이 지정된 테이블이 템플릿 테이블로 표시되지 않았음을 나타냅니다(즉, 해당 테이블에 JET_bitTableCreateTemplateTable 매개 변수 값 집합이 없음).

JET_errIndexDuplicate

두 개의 동일한 인덱스를 정의하려고 했습니다.

JET_errIndexHasPrimary

테이블에 대해 둘 이상의 기본 인덱스 지정을 시도했습니다. 테이블에는 정확히 하나의 기본 인덱스가 있어야 합니다. 기본 인덱스가 지정되지 않은 경우 데이터베이스 엔진에서 투명하게 인덱스가 만들어집니다.

JET_errIndexInvalidDef

잘못된 인덱스 정의가 지정되었습니다. 다음은 이 오류에 대한 몇 가지 가능한 이유입니다.

  • 기본 인덱스는 조건부입니다(즉, JET_INDEXCREATE2 구조체의 grbit 멤버에는 JET_bitIndexPrimary 값이 설정되고 JET_INDEXCREATE2 구조체의 cConditionalColumn 멤버는 0보다 큽니다.)

  • Windows Server 2003부터 Windows Server 운영 체제 버전에 적용됩니다. 튜플 제한이 있지만 JET_INDEXCREATE2 구조체에서 ptuplelimits 멤버를 전달하지 않고 튜플 인덱스를 만들려고 시도합니다(즉, JET_INDEXCREATE2 구조체의 grbit 멤버는 JET_bitIndexTupleLimits 값 집합이 있지만 ptuplelimits 포인터는 null임).

  • JET_INDEXCREATE2 구조체의 szKey 멤버에 잘못된 키 정의를 전달합니다. 유효한 정의에 대한 자세한 내용은 JET_INDEXCREATE2 참조하세요.

  • JET_INDEXCREATE2cbVarSegMac 멤버를 JET_cbPrimaryKeyMost 값(기본 인덱스의 경우)보다 크거나 JET_cbSecondaryKeyMost 값(보조 인덱스의 경우)보다 크도록 설정합니다.

  • 사용자 정의 유니코드 인덱스(JET_INDEXCREATE2 구조체grbit 멤버에 설정된 JET_bitIndexUnicode 값 비트가 있는 인덱스)에 대한 잘못된 조합을 전달합니다. 몇 가지 일반적인 원인으로는 JET_INDEXCREATE2 구조체의 pidxunicode 멤버가 null이거나 pidxunicode 구조에 지정된 LCID가 잘못되었습니다.

  • 기본 인덱스에서 다중값 열을 지정합니다.

  • 조건부 열을 너무 많이 인덱싱하려고 합니다. JET_INDEXCREATE2 구조체의 cConditionalColumn 멤버는 JET_ccolKeyMost 초과해서는 안 됩니다.

JET_errIndexTuplesInvalidLimits

Windows XP부터 시작하는 Windows 버전에 적용됩니다. JET_TUPLELIMITS 구조체가 지정되었으며 해당 제한이 지원되지 않습니다. 자세한 내용은 JET_TUPLELIMITS 구조의 설명 섹션을 참조하세요.

JET_errIndexTuplesNonUniqueOnly

Windows XP부터 시작하는 Windows 버전에 적용됩니다. 튜플 인덱스는 고유할 수 없습니다(즉, JET_INDEXCREATE2 구조체의 grbit 멤버에 JET_bitIndexPrimary 및 JET_bitIndexUnique 값이 모두 설정되어 있지 않아야 함).

JET_errIndexTuplesOneColumnOnly

Windows XP부터 시작하는 Windows 버전에 적용됩니다. 튜플 인덱스는 단일 열 위에만 있을 수 있습니다(즉, JET_INDEXCREATE2 구조체의 grbit 멤버에 JET_bitIndexTuples 값 집합이 있고 JET_INDEXCREATE2 구조체의 szKey 멤버가 둘 이상의 열을 지정하는 경우).

JET_errIndexTuplesSecondaryIndexOnly

Windows XP부터 시작하는 Windows 버전에 적용됩니다. 튜플 인덱스는 기본 인덱스일 수 없습니다(즉, JET_INDEXCREATE2 구조체의 grbit 멤버에는 JET_bitIndexPrimary 및 JET_bitIndexTuples 집합이 모두 없어야 함).

JET_errIndexTuplesTextColumnsOnly

Windows XP부터 시작하는 Windows 버전에 적용됩니다. 튜플 인덱스 는 텍스트 또는 유니코드 열에만 있을 수 있습니다. 다른 열(예: 이진 열)을 인덱싱하려고 하면 JET_errIndexTuplesTextColumnsOnly 응답 코드가 생성됩니다.

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP부터 시작하는 Windows 버전에 적용됩니다. 튜플 인덱스는 JET_INDEXCREATE2 구조체의 cbVarSegMac 멤버를 설정할 수 없습니다.

JET_errInTransaction

트랜잭션에 있는 동안 버전 정보 없이 인덱스 만들기를 시도했습니다.

JET_errInvalidCodePage

JET_COLUMNCREATE 구조체의 cp 멤버가 유효한 코드 페이지로 설정되지 않았습니다. 텍스트 열에 유효한 값은 영어(1252) 및 유니코드(1200)뿐입니다. 값이 0이면 기본값이 사용됩니다(영어, 1252).

JET_errInvalidColumnType

JET_COLUMNCREATE 구조체의 coltyp 멤버가 유효한 열 형식으로 설정되지 않았습니다.

JET_errInvalidCreateIndex

다음은 이 오류가 발생할 수 있는 몇 가지 이유입니다.

  • JET_TABLECREATE2 구조체의 rgindexcreate 멤버가 null로 설정되었습니다.

  • JET_TABLECREATE2 구조체의 rgcolumncreate 멤버가 null로 설정되었습니다.

  • JET_INDEXCREATE2 구조체의 cbStruct 멤버가 유효한 값으로 설정되지 않았습니다.

JET_errInvalidgrbit

grbit 멤버의 잘못된 조합이 JET_TABLECREATE3 구조체에 지정되었습니다.

grbit 멤버에 일관되지 않은 값이 포함되어 있으므로 인덱스 정의가 잘못되었습니다. 몇 가지 가능한 이유는 다음과 같습니다.

  • 기본 인덱스는 무시 비트가 지정되었습니다(즉, JET_bitIndexPrimary 값이 JET_bitIndexIgnoreNull, JET_bitIndexIgnoreAnyNull 또는 JET_bitIndexIgnoreFirstNull 값으로 전달됨).

  • 빈 인덱스는 null 멤버를 무시하지 않습니다(즉, JET_INDEXCREATE2 구조체의 grbit 멤버에는 JET_bitIndexEmpty 값 집합이 있지만 JET_bitIndexIgnoreAnyNull 값 집합은 없음).

  • 잘못된 grbit 멤버를 사용하여 JET_CONDITIONALCOLUMN 구조체를 전달합니다.

JET_errInvalidLanguageId

잘못된 로캘 ID(LCID)가 전달되었습니다(JET_INDEXCREATE2 구조체의 pidxunicode 멤버가 가리키는 JET_UNICODEINDEX 구조체의 lcid 멤버를 통해 또는 JET_INDEXCREATE2 구조체의 lcid 필드를 통해).

JET_errInvalidParameter

잘못된 매개 변수가 지정되었습니다. 몇 가지 가능한 이유는 다음과 같습니다.

  • JET_TABLECREATE3 구조체의 rgcolumncreate 멤버가 null입니다.

  • JET_TABLECREATE2 구조체의 rgcolumncreate 멤버에 지정된 JET_COLUMNCREATE 구조체 중 하나의 cbStruct 멤버가 sizeof( JET_COLUMNCREATE )로 설정되지 않았습니다.

  • JET_INDEXCREATE2 구조체의 cbKey 멤버가 0으로 설정됩니다.

  • JET_INDEXCREATE2 구조체의 cbStruct 멤버가 sizeof( JET_INDEXCREATE2 )로 설정되지 않았습니다.

JET_errRecordTooBig

레코드가 너무 큽습니다. 모든 고정 열에 대한 JET_COLUMNCREATE 구조체의 cbMax 멤버 합계는 특정 값을 초과해서는 안 됩니다.

JET_errTableDuplicate

테이블이 이미 있습니다.

JET_errTooManyColumns

테이블에 너무 많은 열을 추가하려고 했습니다. 테이블에는 고정 열이 JET_ccolFixedMost 이상, 가변 길이 열은 JET_ccolVarMost 이상, 태그가 지정된 열은 JET_ccolTaggedMost 수 없습니다.

JET_errUnicodeTranslationFail

유니코드 열을 정규화하려고 할 때 오류가 발생했습니다. 시스템 리소스가 부족하여 발생할 수 있습니다.

JET_errSpaceHintsInvalid

JET 공간 힌트 구조체의 요소가 올바르지 않거나 실행 가능하지 않습니다.

설명

JetCreateTableColumnIndex4W 함수는 초기 열 및 인덱스 집합이 있는 테이블을 만듭니다. JetAddColumn, JetDeleteColumn, JetDeleteColumn2, JetCreateIndex, JetCreateIndex2, JetCreateIndex3, JetCreateIndex4WJetDeleteIndex 함수를 통해 추가 열 및 인덱스를 동적으로 추가하고 제거할 수 있습니다.

JetOpenTable 함수와 마찬가지로 반환된 tableid를 사용하여 애플리케이션이 완료되면 JetCloseTable 함수가 애플리케이션을 닫아야 합니다.

요구 사항

요구 사항

클라이언트

Windows 8 필요합니다.

서버

Windows Server 2012 필요합니다.

머리글

Esent.h에 선언되었습니다.

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

추가 정보

JET_CBTYP
JET_DBID
JET_ERR
JET_GRBIT
JET_INDEXCREATE
JET_INDEXCREATE2
JET_SESID
JET_TABLEID
JET_TABLECREATE2
JET_TABLECREATE3
JET_TUPLELIMITS
JetAddColumn
JetCreateIndex
JetCreateIndex2
JetCreateIndex3
JetCreateTable
JetCreateTableColumnIndex
JetDeleteColumn
JetDeleteColumn2