giovedì 6 febbraio 2025

SQL SERVER - Controllare se un indice esiste

Una delle attività quotidiane è il ripristino di un DB da un backup remoto che mi permette di fare statistiche senza passare per l'interfaccia del fornitore.
Ovviamente questo ha i suoi pro ed i suoi contro, ma il problema più grosso è che, nel passaggio, alcune strutture "si perdono" o non sono proprio presenti.
Una di queste è una lista di indici utili a velocizzare le estrazioni.

Ho quindi realizzato uno script che viene lanciato subito dopo il ripristino del backup. Il problema è che, a parte dei log non del tutto "puliti", non ho modo di sapere se l'effetto è quello voluto o meno.
E dato che lo script fa anche altro, non sono certo che tutti i comandi vengano eseguiti.

Per cui ho cercato un modo per controllare l'esistenza di un indice nel DB: se l'indice è presente, lo script ha funzionato.

Questo è il codice "generico" per il controllo della presenza di un indice:


use DATABASE_NAME;

if exists (
    select top (1) object_id as index_exists
    from sys.indexes
    where name = N'index_name'
        and object_id = object_id(N'schema_name.table_name')
)
    begin
        print 'Found index "index_name" on "schema_name.table_name".';
    end;
else
    begin
        print 'Did not find index "index_name" on "schema_name.table_name".';
    end;
basta cambiare index_name, schema_name (di solito è dbo) e table_name per effettuare il controllo specifico.