Condividi tramite


Funzione JetCreateIndex4W

Si applica a: Windows | Windows Server

La funzione JetCreateIndex4W crea indici su dati in un database ESE (Extensible Storage Engine), che può essere usato per individuare rapidamente dati specifici.

La funzione JetCreateIndex4W è stata introdotta nel sistema operativo Windows 8.

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

Parametri

sesid

Contesto della sessione di database da usare per la chiamata API.

tableid

Tabella in cui verrà creato l'indice.

pindexcreate

Matrice di strutture JET_INDEXCREATE2 , ognuna delle quali definisce un indice da creare.

cIndexCreate

Numero di elementi nella matrice pindexcreate .

Valore restituito

Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti elencati nella tabella seguente. Per altre informazioni sugli errori ESE possibili, vedere Errori del motore di archiviazione estendibili e parametri di gestione degli errori.

Codice restituito

Descrizione

JET_errSuccess

Operazione riuscita.

JET_errCannotIndex

È stato eseguito un tentativo di indicizzazione su una colonna di aggiornamento di escrow o SLV (si noti che le colonne SLV sono deprecate).

JET_errColumnNotFound

È stato eseguito un tentativo di indicizzazione su una colonna inesistente. Un tentativo di indicizzazione condizionale su una colonna non esistente può anche produrre questo errore.

JET_errDensityInvalid

Questo errore verrà restituito se il membro ulDensity della struttura JET_INDEXCREATE2 è impostato su un numero minore di 20 o maggiore di 100.

JET_errIndexDuplicate

È stato effettuato un tentativo di definire due indici identici.

JET_errIndexHasPrimary

È stato effettuato un tentativo di specificare più indici primari per una tabella. Una tabella deve avere esattamente un indice primario. Se non viene specificato alcun indice primario, il motore di database creerà in modo trasparente uno.

JET_errIndexInvalidDef

È stata specificata una definizione di indice non valida. Di seguito sono riportati alcuni possibili motivi per questo errore:

  • Un indice primario è condizionale (membro grbit di JET_INDEXCREATE2 ha JET_bitIndexPrimary impostato e il membro cConditionalColumn di JET_INDEXCREATE2 è maggiore di zero).

  • Si applica alle versioni di Windows a partire da Windows Server 2003. È stato effettuato un tentativo di creare un indice di tupla con limiti di tupla, ma senza passare informazioni nel membro ptuplelimits in JET_INDEXCREATE2 (ovvero grbit ha JET_bitIndexTupleLimits impostato, ma il puntatore ptuplelimits è Null).

  • Passaggio di una definizione di chiave non valida nel membro szKey della struttura JET_INDEXCREATE2 . Per informazioni sulle definizioni valide, vedere JET_INDEXCREATE2.

  • Impostando il membro cbVarSegMac in JET_INDEXCREATE2 essere maggiore di JET_cbPrimaryKeyMost (per un indice primario) o maggiore diJET_cbSecondaryKeyMost (per un indice secondario).

  • Passaggio di una combinazione non valida per un indice Unicode definito dall'utente (uno con il bit di JET_bitIndexUnicode impostato nel membro grbit di JET_INDEXCREATE2). Alcune cause comuni possono essere che il campo pidxunicode della struttura JET_INDEXCREATE2 è Null o l'LCID specificato nella struttura pidxunicode non è valido.

  • Specifica di una colonna multivalore per un indice primario.

  • Tentativo di indicizzare troppe colonne condizionali. Il membro cConditionalColumn della struttura JET_INDEXCREATE2 non deve essere maggiore di JET_ccolKeyMost.

JET_errIndexTuplesInvalidLimits

Si applica alle versioni di Windows a partire da Windows XP. È stata specificata una struttura JET_TUPLELIMITS e i relativi limiti non sono supportati. Per altre informazioni, vedere la sezione osservazioni della struttura JET_TUPLELIMITS .

JET_errIndexTuplesNonUniqueOnly

Si applica alle versioni di Windows a partire da Windows XP. Un indice di tupla non può essere univoco (grbit non deve avere sia JET_bitIndexTuples che JET_bitIndexUnique set).

JET_errIndexTuplesOneColumnOnly

Si applica alle versioni di Windows a partire da Windows XP. Un indice di tupla può essere solo su una singola colonna, ovvero il membro grbitdella strutturaJET_INDEXCREATE2 ha JET_bitIndexTuples impostato e il membro szKey della struttura JET_INDEXCREATE2 specifica più di una colonna.

JET_errIndexTuplesSecondaryIndexOnly

Si applica alle versioni di Windows a partire da Windows XP. Un indice tuple non può essere un indice primario, ovvero il membro grbit della struttura JET_INDEXCREATE2 non deve avere sia JET_bitIndexPrimary che JET_bitIndexTuples impostato.

JET_errIndexTuplesTextColumnsOnly

Si applica alle versioni di Windows a partire da Windows XP. Un indice di tupla può essere solo in una colonna Unicode o di testo. Un tentativo di indicizzazione di altre colonne , ad esempio colonne binarie, genera JET_errIndexTuplesTextColumnsOnly.

JET_errIndexTuplesVarSegMacNotAllowed

Si applica alle versioni di Windows a partire da Windows XP. Un indice tuple non consente l'impostazione del membro cbVarSegMac della struttura JET_INDEXCREATE2 .

JET_errInTransaction

È stato eseguito un tentativo di creare un indice senza informazioni sulla versione durante una transazione.

JET_errInvalidgrbit

La definizione dell'indice non è valida perché il membro grbit della struttura JET_INDEXCREATE2 contiene valori incoerenti. Di seguito sono riportati alcuni possibili motivi:

  • Un indice primario aveva un bit ignorato (JET_bitIndexPrimary è stato passato con uno dei JET_bitIndexIgnoreNull, JET_bitIndexIgnoreAnyNull o JET_bitIndexIgnoreFirstNull).

  • Un indice vuoto non ignora i campi Null, ovvero il membro grbit della struttura JET_INDEXCREATE2 ha JET_bitIndexEmptyimpostato, ma non ha JET_bitIndexIgnoreAnyNull impostato.

  • Passaggio di una struttura JET_CONDITIONALCOLUMN con un membro grbit non valido. Vedere JET_CONDITIONALCOLUMN.

Quando si creano diversi indici contemporaneamente, ovvero se il parametro cIndexCreate è maggiore di uno, nessuno degli indici può contenere uno dei bit seguenti:

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

Un ID locale non valido (LCID) è stato passato (tramite il membro lcid nella struttura JET_UNICODEINDEX , che il membro pidxunicodenella struttura JET_INDEXCREATE2 contiene un puntatore a o tramite il membro lciddella struttura JET_INDEXCREATE2).

JET_errInvalidName

È stato specificato un nome di indice non valido. Per altre informazioni, vedere JET_INDEXCREATE2 .

JET_errInvalidParameter

Un parametro non valido è stato passato all'API. Di seguito sono riportati alcuni motivi per cui questo errore può essere restituito:

JET_errUnicodeTranslationFail

Si è verificato un errore durante il tentativo di normalizzare una colonna Unicode. Ciò può essere causato dall'esecuzione delle risorse di sistema.

JET_errSpaceHintsInvalid

Un elemento della struttura degli hint dello spazio JET non è corretto o utilizzabile.

Commenti

La funzione JetCreateIndex4W esegue l'iterazione degli indici specificati nel parametro pindexcreate e a volte interromperà il primo errore. Eventuali indici dopo il primo indice con un errore potrebbero non essere stati tentati, anche se il membro err della struttura JET_INDEXCREATE2 contiene JET_errSuccess.

Requisiti

Requisito Valore

Client

Richiede Windows 8.

Server

Richiede Windows Server 2012.

Intestazione

Dichiarato in Esent.h.

Libreria

Usare ESENT.lib.

DLL

Richiede ESENT.dll.

Vedi anche

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE2
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2
JET_SPACEHINTS