SQL извлекает атрибут данных xml и значения из столбца не типа xml

Как получить данные типа xml из столбца типа, отличного от xml, с помощью SQL. У меня есть одна таблица, а столбец внутри нее. xml - это столбец типа ntext.

пример данных столбца xml приведен ниже

<message to="[email protected]" type="chat" from="[email protected]/e76bea0f">
<body>james bond</body>
<active xmlns="http://jabber.org/protocol/chatstates" />
</message>

Я хочу получить значение атрибута "to", "from", а также значение тега

Пожалуйста, предложите


person Pankaj Das    schedule 20.03.2015    source источник


Ответы (1)


Вы пропустили закрывающий тег </message> в xml, но если вы добавите его, вы можете использовать функцию value():

declare @temp table (data ntext)

insert into @temp (data)
select '<message to="[email protected]" type="chat" from="[email protected]/e76bea0f">
<body>james bond</body>
<active xmlns="http://jabber.org/protocol/chatstates" />
</message>'

select
    c.data.value('message[1]/@to', 'nvarchar(max)')
from @temp as t
    outer apply (select cast(data as xml)) as c(data)
person Roman Pekar    schedule 20.03.2015
comment
Спасибо @Roman за отличный ответ, а также за быстрый ответ - person Pankaj Das; 20.03.2015
comment
Привет, Роман, я пытаюсь выполнить этот запрос из приложения PHP, но получаю ошибку /***** [nativecode=1934 - SELECT не удалось, потому что следующие параметры SET имеют неверные настройки: 'ANSI_NULLS, QUOTED_IDENTIFIER, CONCAT_NULL_YIELDS_NULL, ANSI_WARNINGS, ANSI_PADDING' . Убедитесь, что параметры SET подходят для использования с индексированными представлениями и/или индексами вычисляемых столбцов, и/или отфильтрованными индексами, и/или уведомлениями о запросах, и/или методами типа данных XML, и/или операциями пространственного индекса.] *****/ Может вы, пожалуйста, предложите - person Pankaj Das; 20.03.2015