Запрос атрибутов и значений узлов из XML, хранящегося в типе данных XML - PullRequest
2 голосов
/ 02 июня 2011

Я написал интерфейс для взаимодействия с CubeIQ BlackBox (www.magiclogic.com) и у меня есть таблица базы данных SQL Server 2005, где я храню некоторые обычные текстовые поля, даты и два фрагмента XML в столбцах, которые имеют Тип данных XML.

Есть несколько значений, которые я хочу выбрать из XML, и я не могу понять, как запросить XML или атрибуты узлов в этом XML.

Вот тип запроса, который я хочу сделать:

 SELECT 
    [regular_table_field1],
    [regular_table_field2],
    [opt_resposne_xml].rootnode.wrapper.child@attr('someattribute') AS 'someattribute',
    [opt_resposne_xml].rootnode.wrapper.child@attr('someattribute2') AS 'someattribute2'
 FROM [optimizations] WHERE [opt_concept_id] = '1234'

1 Ответ

2 голосов
/ 02 июня 2011

Не зная, как выглядит ваш XML, вот фрагмент кода общего назначения, чтобы дать вам представление о том, как он будет выглядеть:

 SELECT 
    [regular_table_field1],
    [regular_table_field2],
    [opt_resposne_xml].value('(/rootnode/wrapper/child/@someattribute)[1]', 'int') AS 'someattribute',
    [opt_resposne_xml].value('(/rootnode/wrapper/child/@someattribute2)[1]', 'varchar(50)') AS 'someattribute2'
 FROM 
     [optimizations] 
 WHERE 
     [opt_concept_id] = '1234'

Если вам нужно «добраться до» столбца XML и извлечь одно значение (из элемента или атрибута XML), вам, в основном, нужно определить XPath для того места, где находится интересующая вас информация и вам необходимо преобразовать его в данный тип данных SQL Server.

Если вам нужно объединить один реляционный перекрестный ряд с несколькими элементами из одного поля XML, вам могут потребоваться другие подходы (CROSS APPLY).

Также: вам может понадобиться обратить внимание на задействованные пространства имен XML - распространенная ошибка при попытке проанализировать XML внутри SQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...