Разбор XML в не-XML столбце - PullRequest
1 голос
/ 13 апреля 2010

Я достаточно опытен с SQLServer, но я не администратор, поэтому я не уверен, как к этому подойти.

У меня есть кусок XML, хранящийся в столбце ntext. Поскольку это устаревшая база данных и требования проекта, я не могу изменить таблицу (пока). Это пример данных, которыми я должен манипулировать:

<XmlSerializableHashtable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Entries>
        <Entry>
            <key xsi:type="xsd:string">CurrentYear</key><value xsi:type="xsd:string">2010</value>
        </Entry>
        <Entry>
            <key xsi:type="xsd:string">CurrentMonth</key><value xsi:type="xsd:string">4</value>
        </Entry>
    </Entries>
</XmlSerializableHashtable>

каждая строка будет иметь такой фрагмент, но, очевидно, с разными ключами / значениями в XML. Есть ли какой-нибудь умный способ, которым я могу разобрать этот XML в представление стиля пары имя / значение? Или я должен использовать возможности запросов SQLServer XML, даже если это не столбец XML? Если да, то как мне запросить конкретное значение из этого столбца?

(Примечание: добавление вычисляемого столбца XML в конец таблицы возможно, если это поможет).

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 13 апреля 2010

Если вы можете перевести столбец в типизированный столбец XML, вы можете использовать запросы xpath, чтобы извлечь из него данные. ОТО Я бы предположил, что вычисляемый столбец, который преобразует его в XML, может работать. YMMV, но это не должно быть так сложно проверить.

Вы можете использовать cross apply, чтобы получить повторяющуюся группу из поля со значением XML. cross apply эффективно подставляет значение столбца в табличную функцию и позволяет объединять результаты. Эта ссылка показывает пример того, как это сделать.

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

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