2010-06-23 11 views
5

Ich erstelle/ändere eine Tonne Indizes auf einer großen Datenbank. Dies funktioniert, wenn der Index bereits existiert.Drop_existing löst einen Fehler aus, wenn der Index nicht existiert

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

Aber wenn es die Fehler nicht existiert.

mein Skript Ich habe so geändert:

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] 

Die Frage ist also bin ich mit DROP_EXISTING mit falsch?

+2

Aus Performance-Gründen möchten Sie vielleicht IF/es ELSE wie folgt: IF-Index erstellen Sie dann existiert mit DROP_EXISTING ELSE erstellen (ohne DROP_EXISTING) –

+0

@ PhilipKelley ist wahr, aber das erzeugt doppelten Code. Irgendwelche zusätzlichen Vorschläge, um damit umzugehen? – Magier

Antwort

6

Ja, das ist eine Einschränkung von DROP_EXISTING, es schlägt fehl, wenn der Index noch nicht existiert! (Zumindest auf MS SQL 2000 und 2005)

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

+2

Ich kann die gleiche Einschränkung für SQL Server 2008 R2 bestätigen –

+2

Ich kann dieses fehlerhafte Verhalten in SQL 2016 SP1 bestätigen. – Magier

+0

das ist eine lächerliche Begrenzung –

Verwandte Themen