2010-06-23 13 views
5

Sto creando/cambiando una tonnellata di indici su un grande db. Ciò funziona se l'indice esiste già.Drop_existing genera un errore se l'indice non esiste

CREATE UNIQUE CLUSTERED 
INDEX [table1_1] ON [dbo].[table1] ([col1], [col2], [col3]) 
WITH DROP_EXISTING ON [PRIMARY] 

Ma se non esistono gli errori.

così ho cambiato il mio script per:

IF EXISTS (SELECT name FROM sysindexes WHERE name = 'table1_1') DROP INDEX [table1].[table1_1] 
CREATE UNIQUE CLUSTERED 
INDEX [table1_1] ON [dbo].[table1] ([col1], [col2], [col3]) 
ON [PRIMARY] 

Quindi la domanda è sto utilizzando CON DROP_EXISTING sbagliato?

+2

Per motivi di prestazioni, si potrebbe desiderare di if/else in questo modo: Se non esiste indice quindi creare con DROP_EXISTING ELSE creare (senza DROP_EXISTING) –

+0

@ PhilipKelley è vero, ma questo crea un codice pubblicitario. Qualche suggerimento aggiuntivo per gestire questo? – Magier

risposta

6

Sì, questa è una limitazione di DROP_EXISTING, non funziona se l'indice non esiste già! (Almeno su MS SQL 2000 e il 2005)

Riferimento: http://www.mssqltips.com/tip.asp?tip=1362

+2

Posso confermare la stessa limitazione per SQL Server 2008 R2 –

+2

Posso confermare questo comportamento bacato su SQL 2016 SP1. – Magier

+0

questa è una limitazione ridicola –

Problemi correlati