Funzione JetCreateIndex2

Si applica a: Windows | server Windows

Funzione JetCreateIndex2

La funzione JetCreateIndex2 crea indici sui dati in un database ESE, che può essere usato per individuare rapidamente dati specifici.

    JET_ERR JET_API JetCreateIndex2(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          JET_INDEXCREATE* 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_INDEXCREATE , 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 seguenti. Per altre informazioni sui possibili errori ESE, vedere Extensible Archiviazione Engine Errors and Error Handling Parameters.For more information about the possible ESE errors errors, see Extensible Archiviazione Engine Errors and Error Handling Parameters.

Codice restituito

Descrizione

JET_errSuccess

Operazione riuscita.

JET_errCannotIndex

È stato effettuato un tentativo di indicizzazione su una colonna di aggiornamento del deposito o SLV. Si noti che le colonne SLV sono deprecate.

JET_errColumnNotFound

È stato effettuato un tentativo di indicizzazione su una colonna inesistente. Anche il tentativo di indicizzare in modo condizionale su una colonna inesistente può generare questo errore.

JET_errDensityInvalid

Questo errore verrà restituito se il membro ulDensity della struttura JET_INDEXCREATE è impostato su un numero minore di 20 o più 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 ne creerà in modo trasparente uno.

JET_errIndexInvalidDef

È stata specificata una definizione di indice non valida. Alcuni dei possibili motivi per la ricezione di questo errore sono:

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

  • Windows Server 2003 e versioni successive. Tentativo di creare un indice di tupla con limiti di tupla, ma senza passare informazioni nel membro ptuplelimits in JET_INDEXCREATE (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_INDEXCREATE . Per informazioni sulle definizioni valide, vedere JET_INDEXCREATE .

  • L'impostazione del membro cbVarSegMac in JET_INDEXCREATE deve essere maggiore di JET_cbPrimaryKeyMost (per un indice primario) o maggiore di JET_cbSecondaryKeyMost (per un indice secondario).

  • Passaggio di una combinazione non valida per un indice Unicode definito dall'utente(uno con il bit JET_bitIndexUnicode impostato nel membro grbit di JET_INDEXCREATE). Alcune cause comuni possono essere che il campo pidxunicode della struttura JET_INDEXCREATE è NULL oppure 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_INDEXCREATE non deve essere maggiore di JET_ccolKeyMost.

JET_errIndexTuplesInvalidLimits

Windows XP e versioni successive. È stata specificata una struttura JET_TUPLELIMITS e i relativi limiti non sono supportati. Vedere la sezione osservazioni della struttura JET_TUPLELIMITS .

JET_errIndexTuplesNonUniqueOnly

Windows XP e versioni successive. Un indice di tupla non può essere univoco (grbit non deve avere sia JET_bitIndexTuples che JET_bitIndexUnique impostato).

JET_errIndexTuplesOneColumnOnly

Windows XP e versioni successive. Un indice di tupla può essere posizionato solo su una singola colonna, ovvero il membro grbit della struttura JET_INDEXCREATE ha JET_bitIndexTuples impostato e il membro szKey della struttura JET_INDEXCREATE specifica più di una colonna.

JET_errIndexTuplesSecondaryIndexOnly

Windows XP e versioni successive. Un indice di tupla non può essere un indice primario, ovvero il membro grbit della struttura JET_INDEXCREATE non deve avere sia JET_bitIndexPrimary che JET_bitIndexTuples impostato.

JET_errIndexTuplesTextColumnsOnly

Windows XP e versioni successive. Un indice di tupla può trovarsi solo in una colonna di testo o Unicode. Un tentativo di indicizzare altre colonne ,ad esempio colonne binarie, genererà JET_errIndexTuplesTextColumnsOnly.

JET_errIndexTuplesVarSegMacNotAllowed

Windows XP e versioni successive. Un indice di tupla non consente di impostare il membro cbVarSegMac della struttura JET_INDEXCREATE .

JET_errInTransaction

È stato effettuato 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_INDEXCREATE contiene valori incoerenti. Ecco alcuni possibili motivi:

  • Per un indice primario è stato specificato 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_INDEXCREATE ha JET_bitIndexEmpty impostato, ma non ha JET_bitIndexIgnoreAnyNull impostato.

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

Quando si creano più 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

È stato passato un ID impostazioni locali (LCID) non valido (tramite il membro lcid nella struttura JET_UNICODEINDEX , a cui il membro pidxunicode nella struttura JET_INDEXCREATE contiene un puntatore a o tramite il membro lcid della struttura JET_INDEXCREATE ).

JET_errInvalidName

È stato specificato un nome di indice non valido. Per altri dettagli, vedere JET_INDEXCREATE .

JET_errInvalidParameter

Un parametro non valido è stato passato all'API. Alcuni dei motivi per cui questo errore può essere restituito sono:

JET_errUnicodeTranslationFail

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

Commenti

Il valore restituito viene JET_errSuccess al completamento corretto di tutti gli indici specificati.

JetCreateIndex2 scorre gli indici specificati in pindexcreate e talvolta 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_INDEXCREATE contiene JET_errSuccess.

Requisiti

Requisito Valore

Client

Richiede Windows Vista, Windows XP o Windows 2000 Professional.

Server

Richiede Windows Server 2008, Windows Server 2003 o Windows server 2000.

Intestazione

Dichiarato in Esent.h.

Libreria

Usare ESENT.lib.

DLL

Richiede ESENT.dll.

Unicode

Implementato come JetCreateIndex2W (Unicode) e JetCreateIndex2A (ANSI).

Vedere anche

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2