sql-server - microsoft - sql server download




¿Cómo verifica si existe un determinado índice en una tabla? (4)

Algo como esto:

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

pero para los índices.


AdaTheDEV, usé tu sintaxis y creé lo siguiente y por qué.

Problema: el proceso se ejecuta una vez por trimestre y toma una hora debido al índice faltante.

Corrección: alterar el proceso de consulta o el Procedimiento para verificar el índice y crearlo si falta ... El mismo código se coloca al final de la consulta y el procedimiento para eliminar el índice, ya que no es necesario sino trimestral. Mostrando solo la sintaxis de gota aquí

-- drop the index 
begin

  IF EXISTS (SELECT *  FROM sys.indexes  WHERE name='Index_Name' 
    AND object_id = OBJECT_ID('[SchmaName].[TableName]'))
  begin
    DROP INDEX [Index_Name] ON [SchmaName].[TableName];
  end

end

Escribió la siguiente función que me permite verificar rápidamente si existe un índice; Funciona igual que 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: Esto solo devuelve el OBJECT_ID de la tabla, pero será NULL si el índice no existe. Supongo que podría configurar esto para devolver index_id, pero eso no es super útil.


Puedes hacerlo usando una selección directa como esta:

SELECT * 
FROM sys.indexes 
WHERE name='YourIndexName' AND object_id = OBJECT_ID('Schema.YourTableName')

Sin embargo, una ligera desviación de la pregunta original puede resultar útil para las futuras personas que aterrizan aquí y desean DROP y CREATE un índice, es decir, en un script de implementación.

Puede omitir la verificación existente simplemente agregando lo siguiente a su declaración de creación:

CREATE INDEX IX_IndexName
ON dbo.TableName
WITH (DROP_EXISTING = ON);

Lea más aquí: CREATE INDEX (Transact-SQL) - Cláusula DROP_EXISTING

NB Como se mencionó en los comentarios, el índice ya debe existir para que esta cláusula funcione sin que se produzca un error.





sql-server