Измельчение данных XML в SQL Server - PullRequest
0 голосов
/ 05 декабря 2011

Мне нужно импортировать следующий XML в SQL Server 2008 R2:

<Role
  ID="ef63f979-c65d-421a-a214-7319c6279e13" >
  <Privileges>
    <Privilege ID="1" />
    <Privilege ID="2" />
    <Privilege ID="3" />
    <Privilege ID="4" />
    <Privilege ID="5" />
  </Privileges>
</Role>

Я могу сделать это, используя переменную таблицы и дважды анализируя XML, но не могу получить это в реляционной таблице за один раз. Это возможно? Вот ожидаемый набор результатов:

EF63F979-C65D-421A-A214-7319C6279E13    1   2011-12-05 06:51:11.9065096 EF63F979-C65D-421A-A214-7319C6279E13
EF63F979-C65D-421A-A214-7319C6279E13    2   2011-12-05 06:51:11.9065096 EF63F979-C65D-421A-A214-7319C6279E13
EF63F979-C65D-421A-A214-7319C6279E13    3   2011-12-05 06:51:11.9065096 EF63F979-C65D-421A-A214-7319C6279E13
EF63F979-C65D-421A-A214-7319C6279E13    4   2011-12-05 06:51:11.9065096 EF63F979-C65D-421A-A214-7319C6279E13
EF63F979-C65D-421A-A214-7319C6279E13    5   2011-12-05 06:51:11.9065096 EF63F979-C65D-421A-A214-7319C6279E13

Спасибо

Raj

1 Ответ

0 голосов
/ 05 декабря 2011

Я могу извлечь это:

DECLARE @input XML = '<Role
  ID="ef63f979-c65d-421a-a214-7319c6279e13" >
  <Privileges>
    <Privilege ID="1" />
    <Privilege ID="2" />
    <Privilege ID="3" />
    <Privilege ID="4" />
    <Privilege ID="5" />
  </Privileges>
</Role>'

SELECT
    @input.value('(/Role/@ID)[1]', 'uniqueidentifier') AS 'ID',
    T.C.value('(@ID)[1]', 'int') AS 'Privilege'
FROM
    @input.nodes('/Role/Privileges/Privilege') AS T(C)

Дает вывод:

ID                                     Privilege
EF63F979-C65D-421A-A214-7319C6279E13    1
EF63F979-C65D-421A-A214-7319C6279E13    2
EF63F979-C65D-421A-A214-7319C6279E13    3
EF63F979-C65D-421A-A214-7319C6279E13    4
EF63F979-C65D-421A-A214-7319C6279E13    5

но я понятия не имею, откуда берется ваша дата / время .....

...