Я не думаю, что вы можете сделать это в одном запросе - однако, с двумя, вы должны получить результаты, которые вы ищете:
первый запрос для получения всех узлов XML, содержащих текст (внутри элемента), который выглядит как «оранжевый»:
SELECT * FROM dbo.XQueryTest
WHERE XmlContent.value('(//*/text())[1]', 'varchar(50)') LIKE '%orange%'
второй запрос, чтобы сделать то же самое, но на основе значения атрибута:
SELECT * FROM dbo.XQueryTest
WHERE XmlContent.value('(//*/@*)[1]', 'varchar(50)') LIKE '%orange%'
Запрос 1 просто получает значение text()
для всех узлов XML в виде строки (varchar(50)
) и сравнивает его на основе обычного синтаксиса SQL с "% orange%".
Запрос № 2 захватить все значения атрибута (/@*
) и сделать то же самое.
Конечно, вы можете UNION
эти два вместе, если вам действительно нужно.
Надеюсь, это поможет!