2015-03-13 3 views
4

Предполагая, что у меня есть данные таблицы, как показано ниже: Sample TableSQL: Найти, если XML-узел существует

Я хочу, чтобы выбрать все Value (XML Data), который содержит узел Name="Hello World". Как я могу это достичь?

SQL Fiddle

set @f = @XML.exist('/ArrayOfFilterColumn/SelectColumn[(@Name) eq "Hello World"]'); 
select @f; 

Я не знаю, как я мог бы добавить его в моем где состояние, так что я положил его в скрипку.

ответ

6

Пропустить использование XML-переменной и поместить существующее в предложение where при запросе таблицы.

select F.Value 
from XML_FILES as F 
where F.Value.exist('/ArrayOfArrayOfSelectColumn/SelectColumn[@Name eq "Hello World"]') = 1 

Ваш столбец, по-видимому text так что вам нужно, чтобы изменить это, потому что text устарел и был в течение достаточно долгого времени.

ntext, text, and image (Transact-SQL)

NTEXT, типы текста, и данные изображения будут удалены в будущей версии в Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте изменять приложения, которые в настоящее время используют . Вместо этого используйте nvarchar (max), varchar (max) и varbinary (max).

В вашем случае вы должны, естественно, перейти на XML.

Пока вы не исправим, что вы можете применить к XML в своем запросе.

select F.Value 
from XML_FILES as F 
where cast(F.Value as xml).exist('/ArrayOfArrayOfSelectColumn/SelectColumn[@Name eq "Hello World"]') = 1 
+0

Мой столбец Значение типа 'text'. Поэтому он возвращает мне ошибку как «Не могу вызвать методы в тексте». Моя ошибка, как в моей скрипке, я упомянул ее как тип 'XML' –

+0

@ Gun.IO Вы обманули меня, используя столбец XML в скрипке. –

+0

Моя ошибка. Извиняюсь! –