| Previous | Next |
| DB_E_CANTTRANSLATE | DB_E_NOINDEX |
DB_E_DUPLICATEINDEXID
Meaning
Windows documents DB_E_DUPLICATEINDEXID as “Index already exists”. Here, IIndexDefinition or a related schema operation attempts to create an index whose identifier already exists.
Specific conditions that produce the result
- Cause 1: the deployment script is replayed.
- Cause 2: two schema workers race to create the same index.
- Cause 3: identifier normalization makes two requested names equivalent.
Relevant OLE DB contract
This result must be interpreted against this contract: OLE DB data-definition interfaces operate on provider-scoped table and index DBIDs; existence, identifier validity and active use are separate outcomes, and schema changes must account for open rowsets and transactions.
Start with the session performing the definition operation and the table or index identity resolved by that session when investigating this result.
Evidence to collect before changing the system
- Evidence 1: the table and index DBIDs.
- Evidence 2: existing index metadata including key columns and properties.
- Evidence 3: deployment correlation and transaction state.
Corrective actions
- Action 1: treat matching existing definitions as idempotent success when appropriate.
- Action 2: drop or rename only after verifying the existing index is not required.
- Action 3: serialize schema migrations that target the same object.
Practical incident
A migration is rerun after its completion record was lost and attempts to recreate the same index; comparing definitions avoids it.
Retry and recovery policy
Retry rule: retry only after choosing another identifier or confirming an idempotent existing definition.
Difference from related HRESULT values
DB_E_DUPLICATEID is a general duplicate DBID result, while DB_E_DUPLICATEINDEXID specifically identifies an existing index.
Official Microsoft references
Looking for a different code? Search another status or error code.
