如何解析 SQL server 表中的 XML 数据

Kir*_*nov 5 xml sql t-sql sql-server

我有 SQL 表:

Create table
(
ID varchar(50) not null,
Action nvarchar(max) null
)
Run Code Online (Sandbox Code Playgroud)

操作列包含 XML 数据。格式:

<?xml version="1.0" encoding="UTF-8"?> 
<oo_outbound_order>   
         <oo_master>
              <Code>123</Code>
              <Name>Branan</Name> 
    </oo_master> 
    </oo_outbound_order>
Run Code Online (Sandbox Code Playgroud)

如何解析此列?结果应该是这样的:

CODE    NAME
123     Branan
Run Code Online (Sandbox Code Playgroud)

Jay*_*esh 5

尝试以下方法:

DECLARE @XMLData XML = '
<oo_outbound_order>   
    <oo_master>
        <Code>123</Code>
        <Name>Branan</Name> 
    </oo_master> 
</oo_outbound_order>'

SELECT
    [Code] = Node.Data.value('Code', 'INT'),
    [Name] = Node.Data.value('Name', 'NVARCHAR(20)')
    FROM @XMLData.nodes('/oo_outbound_order/oo_master') Node(Data)
Run Code Online (Sandbox Code Playgroud)


vad*_*rak 4

有很多关于使用 TSQL 解析 xml 的教程文章。例如,http://www.sqlserver.info/syntax/parse-xml-with-sql-server/

DECLARE @xml xml
SET @xml = 
'<?xml version="1.0" encoding="UTF-8"?> 
<oo_outbound_order>   
         <oo_master>
              <Code>123</Code>
              <Name>Branan</Name> 
    </oo_master> 
    </oo_outbound_order>'

SELECT 
    n.value('(./Code/text())[1]','int') as CODE
 , n.value('(./Name/text())[1]','Varchar(50)') as NAME
FROM @xml.nodes('/oo_outbound_order/oo_master') as a(n)
Run Code Online (Sandbox Code Playgroud)