SQL Server:如何在查询中获取XML属性?

18 xml sql sql-server

我目前正试图通过SQL查询获取某些XML的所有属性.

我一直在尝试以下方法来检索它,但我必须遗漏一些相当基本的东西.

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

DECLARE @X xml

SET @X = CAST(@T as xml)
SELECT Y.ID.value('@FieldRowId', 'int') as FieldID, 
   Y.ID.value('/Items/@Name', 'varchar(max)') as "Name",
   Y.ID.value('/Attributes/@ID', 'int') as AttributeID
FROM @X.nodes('/root/Field') as Y(ID)
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 48

你必须尝试这样的事情:( @ name属性在"Item"元素上 - 而不是"Items"!)

SET @X = CAST(@T as xml)
SELECT 
   Y.ID.value('(@FieldRowId)[1]', 'int') as FieldID,
   Y.ID.value('(Items/Item/@Name)[1]', 'varchar(max)') as "Name",
   Y.ID.value('(Attributes/Attribute/@ID)[1]', 'int') as AttributeID
FROM @X.nodes('/root/Field') as Y(ID)
Run Code Online (Sandbox Code Playgroud)