JetCreateIndex4W 함수

적용 대상: Windows | Windows Server

JetCreateIndex4W 함수는 특정 데이터를 빠르게 찾는 데 사용할 수 있는 ESE(Extensible Storage Engine) 데이터베이스의 데이터에 대한 인덱스를 만듭니다.

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

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

매개 변수

sesid

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

tableid

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

pindexcreate

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

cIndexCreate

pindexcreate 배열의 요소 수입니다.

반환 값

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

반환 코드

설명

JET_errSuccess

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

JET_errCannotIndex

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

JET_errColumnNotFound

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

JET_errDensityInvalid

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

JET_errIndexDuplicate

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

JET_errIndexHasPrimary

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

JET_errIndexInvalidDef

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

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

  • Windows Server 2003부터 Windows 버전에 적용됩니다. 튜플 제한이 있는 튜플 인덱스를 만들려고 했지만 JET_INDEXCREATE2ptuplelimits 멤버에 정보를 전달하지 않았습니다(즉, grbitJET_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 버전에 적용됩니다. 튜플 인덱스는 고유할 수 없습니다(grbit 에는 JET_bitIndexTuplesJET_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_errInvalidgrbit

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

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

  • 빈 인덱스는 null 필드를 무시하지 않습니다(즉, JET_INDEXCREATE2 구조의 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_INDEXCREATE2 구조체의 pidxunicode 멤버에 포인터가 포함되어 있거나 JET_INDEXCREATE2 구조체의 lcid 멤버를 통해).

JET_errInvalidName

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

JET_errInvalidParameter

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

  • JET_INDEXCREATE2 구조체의 cbKey 필드는 0으로 설정됩니다.

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

JET_errUnicodeTranslationFail

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

JET_errSpaceHintsInvalid

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

설명

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

요구 사항

요구 사항

클라이언트

Windows 8 필요합니다.

서버

Windows Server 2012 필요합니다.

머리글

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

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

추가 정보

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE2
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2
JET_SPACEHINTS