| Previous | Next |
| hrIndexInvalidDef | hrTooManyOpenIndexes |
hrIndexHasClustered
The object and state that matter
hrIndexHasClustered means the table already owns a clustered index and cannot accept another clustered layout.
This is the legacy Directory Service backup/restore HRESULT form of JET_errIndexHasClustered (0xC8000580).
The key comparison is: hrIndexHasPrimary concerns primary-key designation; clustered storage order is the decisive issue here. The first useful observation is to enumerate index flags and determine whether an earlier migration created the existing clustered index. This evidence separates index schema, current-index cursor state, key construction, and duplicate data.
Minimum useful trace
- Code-specific observation: enumerate index flags and determine whether an earlier migration created the existing clustered index.
- the encoded key and existing row when uniqueness is involved; associate it with this result rather than with a later generic exception.
- the raw index key definition, flags, locale, and conditional columns; associate it with this result rather than with a later generic exception.
- the current index plus every JetMakeKey segment and grbit.
How to avoid a false diagnosis
hrIndexDuplicate | an index with the requested name or equivalent definition already exists |
|---|---|
hrIndexHasPrimary | the table already has a primary index and the request attempts to define another |
hrIndexCantBuild | ESE cannot construct the requested clustered index from the existing table and definition |
The ESE objects in play
| Diagnostic layer | B-tree index definition, key construction, uniqueness, and current-index cursor state |
|---|---|
| Typical API surface | JetCreateIndex, JetDeleteIndex, JetSetCurrentIndex, JetMakeKey, JetSeek, and JetSetIndexRange |
| Code-specific condition | the table already owns a clustered index and cannot accept another clustered layout |
| First corrective direction | choose one clustered layout or migrate rows into a newly defined table |
Index schema and runtime key-building state are separate diagnostic layers. Key bytes depend on segment order, column representation, collation, null rules, and sort direction.
Safe recovery sequence
- Freeze the failing request context and record
0xC8000580, the Jet API name, and the current instance/session ownership. - Verify the code-specific precondition: enumerate index flags and determine whether an earlier migration created the existing clustered index.
- Apply the targeted fix: choose one clustered layout or migrate rows into a newly defined table.
- Before retrying the operation, reconcile index definition, selected cursor index, and key or uniqueness outcome.
Actions that can hide or worsen the problem
- Do not drop or rebuild an index before checking uniqueness and table-layout dependencies.
- Do not treat a key-construction or duplicate-key result as database-file corruption.
Technical references
Looking for a different code? Search another status or error code.