Запрос атрибутов из XML файла

Рейтинг: 2Ответов: 1Опубликовано: 13.03.2015

Создал таблицу в MS SQL 2008 со столбцом типа xml (связал его с коллекцией схем созданной ранее на основе xsd схемы), затем сам xml загрузил в эту ячейку.

Вот пример XML:

<AddressObjectTypes>
 <AddressObjectType LEVEL="0" SOCRNAME="" KOD_T_ST="0" />
 <AddressObjectType LEVEL="1" SOCRNAME="Автономный округ" SCNAME="АО" KOD_T_ST="101" />
 <AddressObjectType LEVEL="1" SOCRNAME="Автономная область" SCNAME="Аобл" KOD_T_ST="102" />
 <AddressObjectType LEVEL="1" SOCRNAME="Город" SCNAME="г" KOD_T_ST="103" />

Теперь пробую извлечь оттуда значения атрибутов:

select 
x.value('(/AddressObjectTypes/AddressObjectType[@LEVEL="1"]/@SOCRNAME)[1]','varchar(50)') 
from T

Ошибка:

Оператор "=" невозможно применить к операндам "<anonymous>" и "xs:string".

Что я делаю не так? Возможно ли выбрать все атрибуты SOCRNAME у которых level=1?

Ответы

▲ 1Принят

Ваш запрос должен работать корректно, но он вернет только первый атрибут из каждой записи. Возможно проблема в том, что у вас не закрыт корневой элемент . Такой запрос вернет все значения указанного атрибута:

SELECT T1.X1.value('@SOCRNAME[1]', 'varchar(100)') as activity
FROM T
CROSS APPLY x.nodes('(/AddressObjectTypes/AddressObjectType[@LEVEL="1"])') as T1(X1)