Wie überprüfe ich, ob in SQL Server 2005 ein nicht gruppierter Index vorhanden ist?

72

Ich habe folgendes:

CREATE NONCLUSTERED INDEX [MyTableIndex]
ON [dbo].[tablename] ([tablename_ID],[tablename_Field1])
INCLUDE ([Tablename_Field2],[Tablename_Field3])

Ich möchte eine if-Anweisung erstellen, um zu überprüfen, ob diese vorhanden ist. Wie mache ich das?

user532104
quelle
1
Mögliches Duplikat von stackoverflow.com/questions/2689766/…
Michael Freidgeim

Antworten:

156
IF NOT EXISTS(SELECT * FROM sys.indexes WHERE name = 'MyTableIndex' AND object_id = OBJECT_ID('tablename'))
    BEGIN
        -- Index with this name, on this table does NOT exist
    END
AdaTheDev
quelle
1
+1 Das funktioniert gut. Sollte oder sollte nicht über das Tabellenschema besorgt sein?
Gotqn
10
@gotqn - Um das Schema zu berücksichtigen, können Sie es einfach als zweiteiligen Namen in den OBJECT_ID-Aufruf aufnehmen, z. B. OBJECT_ID ('myschema.tabellenname')
AdaTheDev
Vielen Dank für diese Erklärung: -]
gotqn
17

Versuche dies:

IF NOT EXISTS(SELECT * FROM sys.indexes WHERE Name = 'MyTableIndex')
   -- put your CREATE INDEX statement here
marc_s
quelle
6
Ich empfehle auch, object_id (gemäß der Antwort von AdaTheDev) zu überprüfen, da Indexnamen nicht eindeutig sind.
McNux