JetCreateIndex2 함수

적용 대상: Windows | Windows Server

JetCreateIndex2 함수

JetCreateIndex2 함수는 특정 데이터를 신속하게 찾는 데 사용할 수 있는 ESE 데이터베이스의 데이터에 대한 인덱스를 만듭니다.

    JET_ERR JET_API JetCreateIndex2(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          JET_INDEXCREATE* pindexcreate,
      __in          unsigned long cIndexCreate
    );

매개 변수

sesid

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

tableid

인덱스가 만들어질 테이블입니다.

pindexcreate

각각 만들 인덱스를 정의하는 JET_INDEXCREATE 구조체의 배열입니다.

cIndexCreate

pindexcreate 배열의 요소 수입니다.

Return Value

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

반환 코드

설명

JET_errSuccess

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

JET_errCannotIndex

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

JET_errColumnNotFound

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

JET_errDensityInvalid

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

JET_errIndexDuplicate

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

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

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

  • 기본 인덱스는 조건부입니다(JET_INDEXCREATEgrbit 멤버가 JET_bitIndexPrimary 설정되었으며 JET_INDEXCREATEcConditionalColumn 멤버가 0보다 큽니다.)

  • Windows Server 2003 이상 튜플 제한이 있는 튜플 인덱스를 만들려고 하지만 JET_INDEXCREATEptuplelimits 멤버에 정보를 전달하지 않습니다(즉, 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

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

JET_errIndexTuplesNonUniqueOnly

XP 이상을 Windows. 튜플 인덱스는 고유할 수 없습니다(grbit 에는 JET_bitIndexTuples 및 JET_bitIndexUnique 집합이 모두 없어야 함).

JET_errIndexTuplesOneColumnOnly

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

JET_errIndexTuplesSecondaryIndexOnly

XP 이상을 Windows. 튜플 인덱스는 기본 인덱스일 수 없습니다(즉, JET_INDEXCREATE 구조체의 grbit 멤버는 JET_bitIndexPrimary 및 JET_bitIndexTuples 집합을 둘 다 가질 수 없습니다).

JET_errIndexTuplesTextColumnsOnly

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

JET_errIndexTuplesVarSegMacNotAllowed

XP 이상을 Windows. 튜플 인덱스는 JET_INDEXCREATE 구조체의 cbVarSegMac 멤버를 설정할 수 없습니다.

JET_errInTransaction

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

JET_errInvalidgrbit

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

  • 기본 인덱스의 무시 비트가 지정되었습니다(JET_bitIndexPrimary JET_bitIndexIgnoreNull, JET_bitIndexIgnoreAnyNull 또는 JET_bitIndexIgnoreFirstNull 중 하나를 사용하여 전달됨).

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

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

한 번에 여러 인덱스를 만들 때(즉, cIndexCreate 매개 변수가 1보다 큰 경우) 인덱스에 다음 비트가 포함되지 않을 수 있습니다.

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

잘못된 로캘 ID(LCID)가 전달되었습니다(JET_UNICODEINDEX 구조체의 lcid 멤버를 통해 JET_INDEXCREATE 구조체의 pidxunicode 멤버에 포인터가 포함되어 있거나 JET_INDEXCREATE 구조체의 lcid 멤버를 통해).

JET_errInvalidName

잘못된 인덱스 이름을 지정했습니다. 자세한 내용은 JET_INDEXCREATE 참조하세요.

JET_errInvalidParameter

잘못된 매개 변수가 API에 전달되었습니다. 이 오류가 반환될 수 있는 몇 가지 이유는 다음과 같습니다.

JET_errUnicodeTranslationFail

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

설명

반환 값은 지정된 모든 인덱스를 성공적으로 완료할 때 JET_errSuccess.

JetCreateIndex2pindexcreate에 지정된 인덱스를 반복하며, 경우에 따라 첫 번째 실패 시 중단됩니다. JET_INDEXCREATE 구조체오류 멤버에 JET_errSuccess 포함되어 있더라도 오류가 발생한 첫 번째 인덱스 이후의 인덱스는 시도되지 않았을 수 있습니다.

요구 사항

요구 사항

클라이언트

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

서버

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

머리글

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

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

유니코드

JetCreateIndex2W(유니코드) 및 JetCreateIndex2A(ANSI)로 구현됩니다.

참고 항목

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2