JetCreateTableColumnIndex 함수

적용 대상: Windows | Windows Server

JetCreateTableColumnIndex 함수

JetCreateTableColumnIndex 함수는 초기 인덱스 집합과 JET_TABLECREATE 구조체 배열의 초기 열 집합을 사용하여 ESE 데이터베이스에 테이블을 만듭니다. JetCreateTableColumnIndex라는 이름은 개체를 만드는 순서에서 비롯됩니다. 먼저 테이블, 열을 만든 다음 마지막으로 인덱스를 만듭니다.

    JET_ERR JET_API JetCreateTableColumnIndex(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in_out      JET_TABLECREATE* ptablecreate
    );

매개 변수

sesid

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

dbid

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

ptablecreate

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

반환 값

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

반환 코드

설명

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_INDEXCREATE 구조체의 ulDensity 멤버가 20보다 작거나 100보다 큰 숫자로 설정된 경우 반환됩니다.

JET_errDDLNotInheritable

JET_TABLECREATE 구조체의 szTemplateTableName 멤버에 이름이 지정된 테이블이 템플릿 테이블로 표시되지 않았음을 나타냅니다(즉, 해당 테이블에 JET_bitTableCreateTemplateTable 설정되지 않음).

JET_errIndexDuplicate

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

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

잘못된 인덱스 정의가 지정되었습니다. 이 오류를 받을 수 있는 몇 가지 이유는 다음과 같습니다.

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

  • Windows Server 2003 이상. 튜플 제한이 있는 튜플 인덱스를 만들려고 하지만 JET_INDEXCREATE 구조체에서 ptuplelimits 멤버를 전달하지 않고 시도합니다(즉, JET_INDEXCREATE 구조체의 grbit 멤버는 JET_bitIndexTupleLimits 설정되었지만 ptuplelimits 포인터는 NULL임).

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

  • JET_INDEXCREATE cbVarSegMac 멤버를 JET_cbPrimaryKeyMost (기본 인덱스의 경우) 보다 크거나 JET_cbSecondaryKeyMost(보조 인덱스의 경우)로 설정합니다.

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

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

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

JET_errIndexTuplesInvalidLimits

Windows XP 이상. JET_TUPLELIMITS 구조체가 지정되었으며 해당 제한이 지원되지 않습니다. JET_TUPLELIMITS 구조의 설명 섹션을 참조하세요.

JET_errIndexTuplesNonUniqueOnly

Windows XP 이상. 튜플 인덱스는 고유할 수 없습니다(즉, JET_INDEXCREATE 구조체의 grbit 멤버에는 JET_bitIndexPrimary 및 JET_bitIndexUnique 집합이 모두 없어야 함).

JET_errIndexTuplesOneColumnOnly

Windows XP 이상. 튜플 인덱스는 단일 열 위에만 있을 수 있습니다(즉, JET_INDEXCREATE 구조체의 grbit 멤버가 JET_bitIndexTuples 설정되고 JET_INDEXCREATE 구조체의 szKey 멤버가 둘 이상의 열을 지정하는 경우).

JET_errIndexTuplesSecondaryIndexOnly

Windows XP 이상. 튜플 인덱스는 기본 인덱스일 수 없습니다(즉, JET_INDEXCREATE 구조체의 grbit 멤버에 JET_bitIndexPrimary 및 JET_bitIndexTuples 집합이 모두 없어야 함).

JET_errIndexTuplesTextColumnsOnly

Windows XP 이상. 튜플 인덱스 는 텍스트 또는 유니코드 열에만 있을 수 있습니다. 다른 열(예: 이진 열)을 인덱싱하려고 하면 JET_errIndexTuplesTextColumnsOnly 발생합니다.

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP 이상. 튜플 인덱스는 JET_INDEXCREATE 구조체의 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_INDEXCREATE 구조체의 cbStruct 멤버가 유효한 값으로 설정되지 않았습니다.

JET_errInvalidgrbit

grbit 멤버의 잘못된 조합이 JET_TABLECREATE 또는 JET_TABLECREATE2 지정되었습니다.

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

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

  • 빈 인덱스는 NULL 멤버를 무시하지 않습니다(즉, JET_INDEXCREATE 구조의 grbit 멤버는 JET_bitIndexEmpty 설정되었지만 JET_bitIndexIgnoreAnyNull 설정되지는 않음).

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

JET_errInvalidLanguageId

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

JET_errInvalidParameter

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

  • JET_TABLECREATE2 구조체의 rgcolumncreate 멤버는 NULL입니다.

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

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

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

JET_errRecordTooBig

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

JET_errTableDuplicate

테이블이 이미 있습니다.

JET_errTooManyColumns

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

JET_errUnicodeTranslationFail

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

설명

JetCreateTableColumnIndex를 호출하는 것은 JetCreateTableColumnIndex2를 호출하는 것과 동일하며, JET_TABLECREATE2구조의 각 필드에는 JET_TABLECREATE 해당 필드의 값이 포함되며 다음 예외가 있습니다.

  • sizeof(JET_TABLECREATE2)로 설정된 JET_TABLECREATE2.cbStruct

  • JET_TABLECREATE2.szCallback이 NULL로 설정

  • JET_TABLECREATE2.cbtyp이 0으로 설정

자세한 내용은 JetCreateTableColumnIndex2 를 참조하세요.

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

요구 사항

요구 사항

클라이언트

Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다.

서버

Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다.

머리글

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

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

유니코드

JetCreateTableColumnIndexW(유니코드) 및 JetCreateTableColumnIndexA(ANSI)로 구현됩니다.

참고 항목

JET_DBID
JET_ERR
JET_GRBIT
JET_TABLEID
JET_TABLECREATE
JET_TABLECREATE2
JetAddColumn
JetCreateTableColumnIndex
JetCreateTableColumnIndex2