Что-то вроде этого:
SELECT
*
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'
но для индексов.
sql-server
Ливен Кардоен
источник
источник
Ответы:
Вы можете сделать это с помощью прямого выбора, например:
источник
IF EXISTS(SELECT * ...) BEGIN ... END
.YourTableName
должно быть полное имя со схемойДля SQL 2008 и новее , более кратким методом кодирования для обнаружения существования индекса является использование
INDEXPROPERTY
встроенной функции:Самое простое использование со
IndexID
свойством:Если индекс существует, вышеприведенный вернет его идентификатор; если этого не произойдет, он вернется
NULL
.источник
AdaTheDEV, я использовал ваш синтаксис и создал следующее и почему.
Проблема: процесс выполняется один раз в квартал, что занимает час из-за отсутствия индекса.
Исправление: измените процесс запроса или процедуру, чтобы проверить индекс и создать его, если он отсутствует ... Тот же код помещается в конец запроса и процедуры для удаления индекса, поскольку он не нужен, но ежеквартально. Здесь показан только синтаксис удаления
источник
Небольшое отклонение от первоначального вопроса , однако , может оказаться полезным для будущих людей посадки здесь желающих
DROP
иCREATE
индекса, то есть в сценарии развертывания.Вы можете обойти проверку существующих, просто добавив в ваш оператор create следующее:
Подробнее читайте здесь: CREATE INDEX (Transact-SQL) - предложение DROP_EXISTING
NB. Как уже упоминалось в комментариях, индекс должен уже существовать, чтобы это предложение работало без ошибки.
источник
Если скрытая цель вашего вопроса состоит в
DROP
том, чтобы индексировать, прежде чем переходитьINSERT
к большой таблице, то это полезный однострочный:Этот синтаксис доступен с SQL Server 2016. Документация для
IF EXISTS
:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/
Если вместо этого вы имеете дело с первичным ключом, используйте это:
источник
Написал ниже функцию, которая позволяет мне быстро проверить, существует ли индекс; работает так же, как OBJECT_ID.
РЕДАКТИРОВАТЬ: Это просто возвращает OBJECT_ID таблицы, но это будет NULL, если индекс не существует. Я полагаю, вы могли бы установить это, чтобы возвращать index_id, но это не супер полезно.
источник
источник
Чтобы проверить кластеризованный индекс на определенной таблице или нет:
источник