356 Stimmen

Wie prüft man, ob ein bestimmter Index in einer Tabelle existiert?

Etwa so:

SELECT
* 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'

sondern für Indizes.

7voto

Mark Williams Punkte 565

Ich habe die folgende Funktion geschrieben, mit der ich schnell prüfen kann, ob ein Index existiert; sie funktioniert genauso wie OBJECT_ID.

CREATE FUNCTION INDEX_OBJECT_ID (
    @tableName VARCHAR(128),
    @indexName VARCHAR(128)
    )
RETURNS INT
AS
BEGIN
    DECLARE @objectId INT

    SELECT @objectId = i.object_id
    FROM sys.indexes i
    WHERE i.object_id = OBJECT_ID(@tableName)
    AND i.name = @indexName

    RETURN @objectId
END
GO

EDIT: Dies gibt nur die OBJECT_ID der Tabelle zurück, aber es wird NULL sein, wenn der Index nicht existiert. Ich nehme an, Sie könnten dies einstellen, um index_id zurückzugeben, aber das ist nicht super nützlich.

3voto

-- Delete index if exists
IF EXISTS(SELECT TOP 1 1 FROM sys.indexes indexes INNER JOIN sys.objects 
objects ON indexes.object_id = objects.object_id WHERE indexes.name 
='Your_Index_Name' AND objects.name = 'Your_Table_Name')
BEGIN
    PRINT 'DROP INDEX [Your_Index_Name] ON [dbo].[Your_Table_Name]'
    DROP INDEX [our_Index_Name] ON [dbo].[Your_Table_Name]
END
GO

0voto

Arjoon Punkte 160
EXEC sp_helpindex '[[[SCHEMA-NAME.TABLE-NAME]]]'
GO

-1voto

Rajiv Singh Punkte 808

Um zu überprüfen, ob ein Clustered Index für eine bestimmte Tabelle existiert oder nicht:

SELECT * FROM SYS.indexes 
WHERE index_id = 1 AND name IN (SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'Table_Name')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X