如何显示XML列数据

问题描述 投票:0回答:1

我有一个包含XML文件的表列。我想读取XML数据并显示它。 enter image description here

我想出了以下代码。但它只读取列中的一行,也希望显示其他XML数据

declare @xml xml
select  @xml = event_data_XML from #temp

SELECT * FROM (
SELECT 
CAST(f.x.query('data(@name)') as varchar(150)) as data_name,
CAST(f.x.query('data(value)') as varchar(150)) as data_value
FROM @xml.nodes('/event') as t(n)
CROSS APPLY t.n.nodes('data') as f(x)) X
PIVOT (MAX(data_value) FOR data_name IN (NTDomainName, DatabaseName, ServerName)) as pvt

输出应该是这样的(NTDomainName,DatabaseName,ServerName是xml数据)

enter image description here

sql sql-server xml stored-procedures
1个回答
0
投票

有很多方法可以做到这一点。我会告诉你一种我觉得你最容易找到的方法。

首先,这是一个包含一些测试数据的表:

CREATE TABLE dbo.stuff (
    id int identity (1,1) primary key
  , event_data_xml xml
  , create_date datetime default(getdate())
  , is_active bit default(1)
);

INSERT INTO dbo.stuff (event_data_xml)
VALUES ('<event name="thing" package="as">something</event>')
INSERT INTO dbo.stuff (event_data_xml)
VALUES ('<event name="otherthing" package="as">something else</event>')

---All records
SELECT * FROM dbo.[stuff];

到目前为止有道理吗?如果我想混合XML数据和列数据,这是我使用的查询:

---Parsed up
SELECT event_data_xml.value('/event[1]', 'nvarchar(max)') AS [parsed element #text]
     , event_data_xml.value('/event[1]/@name', 'nvarchar(max)') AS [parsed attribute value]
     , create_date --column from table
  FROM dbo.stuff
 WHERE is_active = 1;

使用XML列上的value()函数将xpath传递给我想要显示的内容,并使用SQL Server数据类型返回我想要的内容。

只需确保使用xpath表达式选择单个值。

© www.soinside.com 2019 - 2024. All rights reserved.