Coś takiego:
SELECT
*
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'
ale dla indeksów.
sql-server
Lieven Cardoen
źródło
źródło
Odpowiedzi:
Możesz to zrobić za pomocą prostego wyboru, takiego jak to:
źródło
IF EXISTS(SELECT * ...) BEGIN ... END
.YourTableName
powinno to być pełne imię i nazwisko ze schematemW SQL 2008 i nowszych bardziej zwięzłą, kodową metodą wykrywania istnienia indeksu jest użycie
INDEXPROPERTY
wbudowanej funkcji:Najprostszym zastosowaniem jest
IndexID
właściwość:Jeśli indeks istnieje, powyższe zwróci jego identyfikator; jeśli nie, wróci
NULL
.źródło
AdaTheDEV, użyłem twojej składni i stworzyłem następujące i dlaczego.
Problem: Proces przebiega raz na kwadrans i zajmuje godzinę z powodu braku indeksu.
Korekta: Zmień proces zapytania lub Procedurę, aby sprawdzić indeks i utwórz go, jeśli go brakuje ... Na końcu zapytania i procedury usuwany jest ten sam kod, aby usunąć indeks, ponieważ nie jest on potrzebny, ale co kwartał. Pokazuje tutaj tylko składnię
źródło
Nieznaczne odchylenie od pierwotnego pytania jednak mogą okazać się przydatne dla przyszłych osób lądujących tu chcących
DROP
iCREATE
indeksu, czyli w skrypcie wdrażania.Możesz pominąć istniejący czek, po prostu dodając następujące elementy do instrukcji create:
Przeczytaj więcej tutaj: UTWÓRZ INDEKS (Transact-SQL) - DROP_EXISTING Klauzula
Uwaga: Jak wspomniano w komentarzach, indeks musi już istnieć, aby ta klauzula działała bez zgłaszania błędu.
źródło
Jeśli ukrytym celem twojego pytania jest
DROP
indeksowanie przedINSERT
przejściem do dużego stołu, to jest to przydatne w jednym wierszu:Ta składnia jest dostępna od SQL Server 2016. Dokumentacja dla
IF EXISTS
:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/
Jeśli zamiast tego masz do czynienia z kluczem podstawowym, użyj tego:
źródło
Napisałem poniższą funkcję, która pozwala mi szybko sprawdzić, czy indeks istnieje; działa podobnie jak OBJECT_ID.
EDYCJA: Zwraca tylko OBJECT_ID tabeli, ale będzie wynosić NULL, jeśli indeks nie istnieje. Przypuszczam, że możesz ustawić to tak, aby zwracało index_id, ale to nie jest bardzo przydatne.
źródło
źródło
Aby sprawdzić Indeks klastrowy istnieje na konkretnej tabeli, czy nie:
źródło