Это основано на неправильном представлении о том, что XML-индексы в настоящее время являются единственным типом, который может когда-либо иметь схему идентификатора, которая> = 256000 (по крайней мере, на основании их наблюдения; эта схема не документирована AFAIK, поэтому даже не уверен, является ли она преднамеренной). Вероятно, хорошо в текущих версиях, но кто знает, какой тип индекса будет добавлен дальше и где начнется его схема идентификации? Если вы хотите исключить XML-индексы, теперь вы также исключаете что-то еще. Например, кажется, что пространственные индексы начинаются с id = 384000. Если в приведенном выше запросе предполагается включить пространственные индексы, но не XML-индексы, их ждет сюрприз.
Гораздо лучший фильтр будет:
WHERE type <> 3;
... или даже лучше, так как это самодокументируется ...
WHERE type_desc <> N'XML';
И теперь, когда вы хотите исключить, скажем, пространственные индексы, ваш запрос меняется на ...
WHERE type_desc NOT IN (N'XML', N'SPATIAL');
... вместо того, чтобы выяснить, какой числовой диапазон могут занимать значения идентификаторов для пространственных индексов (или нет). Удачи с этим.
Они довольно четко задокументированы в sys.indexes (Transact-SQL) . Я не вижу ссылки на это магическое число, и я настоятельно рекомендую вам указать здесь вашего учебника, чтобы они могли видеть, что на это магическое число не следует полагаться (не говоря уже о том, чтобы научить других полагаться).
sys.sysindexkeys