Algo assim:
SELECT
*
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_TreeNodesBinaryAssets_BinaryAssets'
and TABLE_NAME = 'TreeNodesBinaryAssets'
mas para índices.
sql-server
Lieven Cardoen
fonte
fonte
Respostas:
Você pode fazer isso usando uma seleção direta como esta:
fonte
IF EXISTS(SELECT * ...) BEGIN ... END
.YourTableName
deve ser o nome completo com esquemaPara o SQL 2008 e versões mais recentes , um método mais conciso, em termos de codificação, para detectar a existência de índice é usando a
INDEXPROPERTY
função interna:O uso mais simples é com a
IndexID
propriedade:Se o índice existir, o acima retornará seu ID; caso contrário, retornará
NULL
.fonte
AdaTheDEV, usei sua sintaxe e criei o seguinte e por quê.
Problema: o processo é executado uma vez por trimestre, levando uma hora devido à falta do índice.
Correção: Altere o processo de consulta ou o Procedimento para verificar o índice e criá-lo se estiver ausente ... O mesmo código é colocado no final da consulta e do procedimento para remover o índice, pois não é necessário, mas trimestralmente. Mostrando apenas soltar sintaxe aqui
fonte
Um pequeno desvio da pergunta original, no entanto, pode ser útil para futuras pessoas que desembarcarem aqui que desejam
DROP
eCREATE
um índice, ou seja, em um script de implantação.Você pode ignorar a verificação existente simplesmente adicionando o seguinte à sua instrução create:
Leia mais aqui: CREATE INDEX (Transact-SQL) - Cláusula DROP_EXISTING
NB Como mencionado nos comentários, o índice já deve existir para que esta cláusula funcione sem gerar um erro.
fonte
Se o objetivo oculto da sua pergunta é
DROP
o índice antes de criarINSERT
uma tabela grande, isso é útil:Essa sintaxe está disponível desde o SQL Server 2016. Documentação para
IF EXISTS
:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/
Caso você lide com uma chave de primery, use o seguinte:
fonte
Escreveu a função abaixo que me permite verificar rapidamente se existe um índice; funciona exatamente como OBJECT_ID.
EDIT: Isso apenas retorna o OBJECT_ID da tabela, mas será NULL se o índice não existir. Suponho que você possa definir isso para retornar index_id, mas isso não é super útil.
fonte
fonte
Para verificar o índice clusterizado existe em uma tabela específica ou não:
fonte