SQL Server - OPENXML, как получить значение атрибута - PullRequest
0 голосов
/ 21 марта 2009

У меня есть следующий XML:

<Field FieldRowId="1000">
    <Items>
        <Item Name="CODE"/>
        <Item Name="DATE"/>
    </Items>
</Field>

Мне нужно получить FieldRowId с использованием OPENXML. SQL у меня до сих пор:

INSERT INTO @tmpField
      ([name], [fieldRowId])
SELECT [Name], --Need to get row id of the parent node
 FROM OPENXML (@idoc, '/Field/Items/Item', 1) 

Ответы [ 2 ]

2 голосов
/ 21 марта 2009

РЕДАКТИРОВАТЬ: я добавил корневой узел в XML. и продемонстрировал захват удостоверения личности. Я предполагаю, что у вас есть более одного элемента поля в XML. Это предполагает, что у вас есть исходный XML; Вы получили Предмет и должны пройти вверх?

DECLARE @T varchar(max) 
SET @T = 
'<root>
    <Field FieldRowId="1000">
        <Items>
            <Item Name="CODE"/>
            <Item Name="DATE"/>
        </Items>
    </Field>
    <Field FieldRowId="2000">
        <Items>
            <Item Name="CODE"/>
            <Item Name="DATE"/>
        </Items>
    </Field>
</root>'

DECLARE @X xml

SET @X = CAST(@T as xml)
SELECT Y.ID.value('../../@FieldRowId', 'int') as FieldID, 
       Y.ID.value('@Name', 'varchar(max)') as "Name"
FROM @X.nodes('/root/Field/Items/Item') as Y(ID)
0 голосов
/ 24 апреля 2010

Использование узлов это путь. OPENXML занимает 1/8 памяти сервера SQL при каждом его использовании. Хотя OPENXML и узлы, как правило, будут иметь одинаковую производительность запросов.

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