2010-06-23 16 views
5

Estoy creando/cambiando una tonelada de índices en un db grande. Hacer esto funciona si el índice ya existe.Drop_existing arroja un error si el índice no existe

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

Pero si no existe los errores.

así que he cambiado mi guión a:

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] 

Entonces la pregunta es ¿Estoy usando CON DROP_EXISTING mal?

+2

Por motivos de rendimiento, es posible que desee IF/ELSE que de esta manera: si no existe índice luego crear con DROP_EXISTING ELSE crear (sin DROP_EXISTING) –

+0

@ Philip Kelley es cierto, pero esto crea un código duplicado. ¿Alguna sugerencia adicional para manejar esto? – Magier

Respuesta

6

Sí, eso es una limitación de DROP_EXISTING, ¡falla si el índice aún no existe! (Por lo menos en MS SQL 2000 y 2005)

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

+2

Puedo confirmar la misma limitación para SQL Server 2008 R2 –

+2

Puedo confirmar este comportamiento erróneo en SQL 2016 SP1. – Magier

+0

esto es una limitación ridícula –

Cuestiones relacionadas