2016-02-15 8 views
-1

Есть ли способ исследовать то, что я не использовал в качестве значения во время создания отфильтрованного индекса? Я посмотрел на скрипт создания индекса, но по-прежнему не ценю.Отфильтрованный индекс SQL Server 2008 R2

create nonclustered index IX1 where status=0 

Ищу колонки статуса и значение 0 в запросе ниже

+1

В чем вопрос? Студия управления SQL Server может создавать сценарии создания для каждого объекта в базе данных (включая индексы). Разве вы этого не знали, или я не вижу здесь что-то более сложное? – TomTom

+0

Да, есть сценарий сценария индекса thecourse, но я ищу, какое значение я положил во время создания отфильтрованного индекса – canpoint

+1

Итак, в чем разница между скриптом создания и значением, которое вы положили? Это похоже на «Я не хочу слушать запись, что я сказал, я хочу знать, что я сказал». Они идентичны. Если кто-то не изменил индекс тем временем. Ваш вопрос не имеет никакого смысла. – TomTom

ответ

2

Встроенная система каталога sys.indexes имеет информацию фильтра в filter_definition колонке:

select 
    o.name as [Table], 
    i.name as [Index], 
    i.filter_definition as [Filter] 
from sys.objects o 
inner join sys.indexes i on i.object_id = o.object_id 
where i.name = 'IX1' 
+0

, если мое определение фильтра равно null, и я уверен, что он является фильтрованным индексом со значением, следующим шагом я должен управлять – canpoint

+0

. Я проверил это с помощью индексного фильтра, и значение фильтра появилось правильно в 'filter_definition '. Я бы предположил, что либо 1) вы используете представление, имеющее этот фильтр, либо 2) все строки в базе данных на самом деле имеют статус = 0. –

+0

да, вы правы, я протестировал в своем местном, и это дает мне правильный определение фильтра, я проверю причины, которые вы указали, почему он не существует – canpoint

1

Согласно комментариям, SQL Management Studio может подлинник ваш фильтруются индекс. Просто щелкните правой кнопкой мыши по индексу и нажмите Script Index as. Тем не менее, если вы хотите запросить его с помощью SQL, вы можете просто выбрать filter definition столбец из sys.indexes таблицы:

SELECT SCHEMA_NAME(t.schema_id) , 
     t.name , 
     i.name , 
     filter_definition 
FROM sys.indexes i 
     INNER JOIN sys.tables t ON t.object_id = i.object_id 
WHERE i.type > 0 
     AND t.is_ms_shipped = 0 
     AND t.name <> 'sysdiagrams' 
     AND (is_primary_key = 0 
      AND is_unique_constraint = 0 
     ) 
     AND i.name = 'IX1' 
+0

спасибо за помощь, но я также знаю, что люди говорят в комментариях, люди должны внимательно прочитать вопрос, чтобы оскорбить кого-то так easy – canpoint

Смежные вопросы