Compartir a través de


Función JetCreateIndex4W

Se aplica a: Windows | Windows Server

La función JetCreateIndex4W crea índices a través de datos en una base de datos del motor de almacenamiento extensible (ESE), que se puede usar para buscar datos específicos rápidamente.

La función JetCreateIndex4W se introdujo en el 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
);

Parámetros

sesid

Contexto de sesión de base de datos que se va a usar para la llamada API.

tableid

Tabla en la que se creará el índice.

pindexcreate

Matriz de estructuras de JET_INDEXCREATE2 , cada una de las cuales define un índice que se va a crear.

cIndexCreate

Número de elementos de la matriz pindexcreate .

Valor devuelto

Esta función devuelve el tipo de datos JET_ERR con uno de los códigos de retorno enumerados en la tabla siguiente. Para obtener más información sobre los posibles errores de ESE, vea Extensible Storage Engine Errors and Error Handling Parameters.

Código devuelto

Descripción

JET_errSuccess

La operación se ha completado correctamente.

JET_errCannotIndex

Se intentó indizar sobre una columna de actualización de custodia o SLV (tenga en cuenta que las columnas SLV están en desuso).

JET_errColumnNotFound

Se intentó indizar en una columna inexistente. Un intento de indexar condicionalmente a través de una columna inexistente también puede producir este error.

JET_errDensityInvalid

Este error se devolverá si el miembro ulDensity de la estructura JET_INDEXCREATE2 está establecido en un número menor que 20 o mayor que 100.

JET_errIndexDuplicate

Se intentó definir dos índices idénticos.

JET_errIndexHasPrimary

Se intentó especificar más de un índice principal para una tabla. Una tabla debe tener exactamente un índice principal. Si no se especifica ningún índice principal, el motor de base de datos creará uno de forma transparente.

JET_errIndexInvalidDef

Se especificó una definición de índice no válida. Los siguientes son algunos de los motivos posibles de este error:

  • Un índice principal es condicional (el miembro grbit de JET_INDEXCREATE2 tiene JET_bitIndexPrimary establecido y el miembro cConditionalColumn de JET_INDEXCREATE2 es mayor que cero).

  • Se aplica a las versiones de Windows a partir de Windows Server 2003. Se intentó crear un índice de tupla con límites de tupla, pero sin pasar información en el miembro ptuplelimits de JET_INDEXCREATE2 (es decir, grbit tiene JET_bitIndexTupleLimits establecido, pero el puntero ptuplelimits es null).

  • Pasar una definición de clave no válida en el miembro szKey de la estructura JET_INDEXCREATE2 . Para obtener información sobre las definiciones válidas, vea JET_INDEXCREATE2.

  • Establecer el miembro cbVarSegMac en JET_INDEXCREATE2 ser mayor que JET_cbPrimaryKeyMost (para un índice principal) o mayor que JET_cbSecondaryKeyMost (para un índice secundario).

  • Pasar una combinación no válida para un índice Unicode definido por el usuario (uno que tiene el bit de JET_bitIndexUnicode establecido en el miembro grbit de JET_INDEXCREATE2). Algunas causas comunes pueden ser que el campo pidxunicode de la estructura JET_INDEXCREATE2 sea null, o el LCID especificado en la estructura pidxunicode no es válido.

  • Especificar una columna multivalor para un índice principal.

  • Intentando indexar demasiadas columnas condicionales. El miembro cConditionalColumn de la estructura JET_INDEXCREATE2 no debe ser mayor que JET_ccolKeyMost.

JET_errIndexTuplesInvalidLimits

Se aplica a las versiones de Windows a partir de Windows XP. Se especificó una estructura JET_TUPLELIMITS y no se admiten sus límites. Para obtener más información, vea la sección comentarios de la estructura JET_TUPLELIMITS .

JET_errIndexTuplesNonUniqueOnly

Se aplica a las versiones de Windows a partir de Windows XP. Un índice de tupla no puede ser único (grbit no debe tener JET_bitIndexTuples y JET_bitIndexUnique establecido).

JET_errIndexTuplesOneColumnOnly

Se aplica a las versiones de Windows a partir de Windows XP. Un índice de tupla solo puede estar sobre una sola columna (es decir, el miembro grbit de la estructura JET_INDEXCREATE2 tiene JET_bitIndexTuples establecido y el miembro szKey de la estructura JET_INDEXCREATE2 especifica más de una columna).

JET_errIndexTuplesSecondaryIndexOnly

Se aplica a las versiones de Windows a partir de Windows XP. Un índice de tupla no puede ser un índice principal (es decir, el miembro grbit de la estructura JET_INDEXCREATE2 no debe tener JET_bitIndexPrimary y JET_bitIndexTuples establecer).

JET_errIndexTuplesTextColumnsOnly

Se aplica a las versiones de Windows a partir de Windows XP. Un índice de tupla solo puede estar en una columna text o Unicode. Un intento de indexar otras columnas (por ejemplo, columnas binarias) dará como resultado JET_errIndexTuplesTextColumnsOnly.

JET_errIndexTuplesVarSegMacNotAllowed

Se aplica a las versiones de Windows a partir de Windows XP. Un índice de tupla no permite establecer el miembro cbVarSegMac de la estructura JET_INDEXCREATE2 .

JET_errInTransaction

Se intentó crear un índice sin información de versión mientras se encontraba en una transacción.

JET_errInvalidgrbit

La definición de índice no es válida porque el miembro grbit de la estructura JET_INDEXCREATE2 contiene valores incoherentes. Los siguientes son algunos de los motivos posibles:

  • Un índice principal tenía un bit omitido especificado (JET_bitIndexPrimary se pasó con uno de JET_bitIndexIgnoreNull, JET_bitIndexIgnoreAnyNull o JET_bitIndexIgnoreFirstNull).

  • Un índice vacío no omite ningún campo nulo (es decir, el miembro grbit de la estructura de JET_INDEXCREATE2 tiene JET_bitIndexEmpty establecido, pero no tiene JET_bitIndexIgnoreAnyNull establecido).

  • Pasar una estructura de JET_CONDITIONALCOLUMN con un miembro grbit no válido. Consulte JET_CONDITIONALCOLUMN.

Al crear varios índices a la vez (es decir, si el parámetro cIndexCreate es mayor que uno), ninguno de los índices puede contener ninguno de los bits siguientes:

  • JET_bitIndexPrimary

  • JET_bitIndexUnversioned

  • JET_bitIndexEmpty

JET_errInvalidLanguageId

Se pasó un identificador de configuración regional (LCID) no válido (ya sea a través del miembro lcid de la estructura JET_UNICODEINDEX , que el miembro pidxunicode de la estructura JET_INDEXCREATE2 contiene un puntero a o a través del miembro lcid de la estructura JET_INDEXCREATE2 ).

JET_errInvalidName

Se especificó un nombre de índice no válido. Consulte JET_INDEXCREATE2 para obtener más detalles.

JET_errInvalidParameter

Se pasó un parámetro no válido a la API. Estos son algunos de los motivos por los que se puede devolver este error:

  • El campo cbKey de una estructura JET_INDEXCREATE2 se establece en cero.

  • El miembro cbStruct de una estructura de JET_INDEXCREATE2 no está establecido en sizeof(JET_INDEXCREATE2).

JET_errUnicodeTranslationFail

Error al intentar normalizar una columna Unicode. Esto puede deberse a la ejecución de recursos del sistema.

JET_errSpaceHintsInvalid

Un elemento de la estructura de sugerencias de espacio JET no era correcto o accionable.

Comentarios

La función JetCreateIndex4W recorre en iteración los índices especificados en el parámetro pindexcreate y, a veces, se anulará en el primer error. Es posible que no se hayan intentado los índices después del primer índice con un error, aunque el miembro err de la estructura de JET_INDEXCREATE2 contenga JET_errSuccess.

Requisitos

Requisito Value

Cliente

Requiere Windows 8.

Servidor

Requiere Windows Server 2012.

Encabezado

Declarado en Esent.h.

Library

Use ESENT.lib.

Archivo DLL

Requiere ESENT.dll.

Consulte también

JET_CONDITIONALCOLUMN
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_INDEXCREATE2
JetCreateIndex
JetCreateTableColumnIndex
JetCreateTableColumnIndex2
JET_SPACEHINTS