Etwas wie das:
SELECT
*
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'
aber für Indizes.
sql-server
Lieven Cardoen
quelle
quelle
Antworten:
Sie können dies mit einer einfachen Auswahl wie folgt tun:
quelle
IF EXISTS(SELECT * ...) BEGIN ... END
.YourTableName
der vollständige Name mit Schema sein sollteFür SQL 2008 und höher ist die Verwendung der
INDEXPROPERTY
integrierten Funktion eine präzisere Methode zum Erkennen der Indexexistenz in Bezug auf die Codierung :Die einfachste Verwendung ist mit der
IndexID
Eigenschaft:Wenn der Index vorhanden ist, gibt der oben genannte seine ID zurück. Wenn dies nicht der Fall ist, wird es zurückkehren
NULL
.quelle
AdaTheDEV, ich habe Ihre Syntax verwendet und Folgendes erstellt und warum.
Problem: Der Prozess wird vierteljährlich ausgeführt und dauert aufgrund des fehlenden Index eine Stunde.
Korrektur: Ändern Sie den Abfrageprozess oder die Prozedur, um nach dem Index zu suchen und ihn zu erstellen, falls er fehlt. Der gleiche Code wird am Ende der Abfrage und der Prozedur zum Entfernen des Index platziert, da er nicht benötigt wird, sondern vierteljährlich. Hier wird nur die Drop-Syntax angezeigt
quelle
Eine leichte Abweichung von der ursprünglichen Frage kann sich jedoch als nützlich für zukünftige Menschen erweisen, die hier landen und wollen
DROP
undCREATE
einen Index, dh in einem Bereitstellungsskript.Sie können die vorhandene Prüfung umgehen, indem Sie Ihrer create-Anweisung Folgendes hinzufügen:
Lesen Sie hier mehr: CREATE INDEX (Transact-SQL) - DROP_EXISTING-Klausel
Hinweis Wie in den Kommentaren erwähnt, muss der Index bereits vorhanden sein, damit diese Klausel ohne Fehler funktioniert.
quelle
Wenn der versteckte Zweck Ihrer Frage darin besteht,
DROP
den Index vor dem ErstellenINSERT
einer großen Tabelle zu erstellen, ist dies ein nützlicher Einzeiler:Diese Syntax ist seit SQL Server 2016 verfügbar. Dokumentation für
IF EXISTS
:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/
Wenn Sie stattdessen einen Primery-Schlüssel verwenden, verwenden Sie diesen:
quelle
Schrieb die folgende Funktion, mit der ich schnell überprüfen kann, ob ein Index vorhanden ist. funktioniert genauso wie OBJECT_ID.
BEARBEITEN: Dies gibt nur die OBJECT_ID der Tabelle zurück, ist jedoch NULL, wenn der Index nicht vorhanden ist. Ich nehme an, Sie könnten dies so einstellen, dass index_id zurückgegeben wird, aber das ist nicht besonders nützlich.
quelle
quelle
So überprüfen Sie, ob der Clustered Index für eine bestimmte Tabelle vorhanden ist oder nicht:
quelle