Puede utilizar una UDF como:
IF (SELECT [dbo].[Index_Exists] (N'SchemaName', N'TableName', N'IndexName')) = 0
BEGIN
-- Your script
END
Esta función asegurar que el índice se está refiriendo es el más adecuado, ya que pueden utilizar el mismo índice y/o nombre de tabla para diferentes esquemas:
CREATE FUNCTION [dbo].[Index_Exists] (@Schema_Name sysname, @Table_Name sysname, @Index_Name sysname)
RETURNS bit
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @Output bit
SET @Schema_Name = ISNULL(@Schema_Name, N'dbo');
IF EXISTS (SELECT *
FROM sys.indexes ind
JOIN sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id
JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
JOIN sys.tables t ON ind.object_id = t.object_id
WHERE @Table_Name = t.[name]
AND @Schema_Name = OBJECT_SCHEMA_NAME(t.[object_id])
AND @Index_Name = ind.[name]
) SET @Output = CAST(1 as bit)
RETURN ISNULL(@Output,CAST(0 as bit))
END
Deseo que INFORMATION_SCHEMA realmente tenga toda la información del esquema –