Преобразование типа данных XML в SQL 2005 в реляционный набор результатов - PullRequest
2 голосов
/ 05 декабря 2008

У меня есть таблица в базе данных SQL 2005, которая содержит столбец, определенный как тип данных xml. Я пытаюсь написать хранимый процесс, который запрашивает XML и возвращает набор результатов из оператора выбора. Я видел примеры возврата скалярных значений или xml, но не как вернуть набор результатов.

Я собираюсь использовать openxml или есть другое решение?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2008

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

select xmlColumnName.value('XpathExpression', 'outputSqlType') from dataTable

Например,

select xmlColumnName.value('/root/node[@name="myname"]', 'varchar(60)')

Методами являются query (), value (), there (), modify () и node (), о которых вы можете узнать больше в Books Online.

1 голос
/ 05 декабря 2008

Вы можете использовать тип данных xml или OPENXML. Другой автор привел пример типа данных xml, так что вот пример OPENXML.

Хотя это действительно зависит от схемы XML. SQL Server может не понравиться вашей схеме. Если у вас есть контроль над схемой, то это помогает. Возможно, вам придется использовать табличную переменную и создать данные с несколькими вызовами OPENXML для запроса всего.

Например, ввод XML может быть обработан следующим образом:

DECLARE @idoc int
DECLARE @doc nvarchar(max)

SET @doc = '
<xml>
    <Entry Type="Error" Start="2008-11-19 02:16:00" End="2008-11-20 04:55:00" />
    <Entry Type="Success" Start="2008-11-25 12:45:00" End="2008-11-25 13:01:00" />
</xml>'


EXEC sp_xml_preparedocument @idoc OUTPUT, @xml

SELECT   [EventType]
        ,[EventStart]
        ,[EventEnd]
FROM    OPENXML (@idoc, '//Event',1)
        WITH    ([Type]         varchar(30)
                ,[Start]        varchar(30)
                ,[End]          varchar(30)
)

Одной из проблем, с которыми я столкнулся, был синтаксический анализ дат XML (ISO8601 с 'T' и возможным часовым поясом). В итоге я создал сборку .NET с одной строкой кода, чтобы преобразовать ее в дату и время, которые понравились SQL.

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