Насколько я знаю, эти атрибуты никогда не будут проиндексированы. Я нахожусь в той же ситуации, что и вы, и ничто из того, что я прочитал, не говорит мне иначе. Именно так работает полнотекстовая индексация SQL для типа данных XML. Существует нечто с именем iFilter, которое определяет, как оно индексируется, и его нельзя переопределить. То же самое относится и к другим типам данных.
Сервер MS SQL будет индексировать только значения XML и только те атрибуты, которые имеют «верхний уровень, а не число».
Вы можете сохранить XML как тип данных «FILE» в SQL и реализовать свою собственную dll iFilter, которую вы затем зарегистрируете в Windows на сервере SQL и зарегистрировать тип файла iFilter, соответствующий типу файла вашего типа данных «FILE». , Это сложная вещь, которую вы должны сделать в C ++.
Если в XML не выполняются запросы XPath, вы всегда можете изменить тип на varchar или любой другой тип TEXT, который будет проиндексирован как текст.
Возможно, можно добавить столбец метаданных, который существует только для поиска. Копия XML в столбце varchar (max), который будет проиндексирован как текст.
Мой XML содержит ваш типичный ключ, информацию о значении, где ключ хранится как атрибут, и я не могу получить к нему доступ с помощью Contains (), поскольку индексируется только значение.
UPDATE:
Решение, которое я выбрал, заключается в полнотекстовой индексации XML, а затем в 2 этапа поиска. Пропуск 1 сужает результат XML путем полнотекстового поиска. Проход 2 выполняет запрос XPath, чтобы в итоге получить результат. Это намного быстрее, чем только XPath.