【问题标题】:How to display XML column data如何显示 XML 列数据
【发布时间】:2018-03-02 12:11:10
【问题描述】:

我有一个包含 XML 文件的表格列。我想读取 XML 数据并显示出来。

我想出了以下代码。但它只读取列中的一行 还想显示其他 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数据)

【问题讨论】:

  • 添加最小样本数据。
  • 这里我们需要看一些示例数据;没有那里我们无法给出答案。我只能建议在更多节点上使用CROSS APPLY
  • 在不知道您的 XML 的情况下(添加 consumable 示例 - 没有图片!)没有人可以帮助您。你为什么阅读#temp。如果不止一行,您的select @xml = event_data_XML from #temp 将失败...请使用编辑选项添加更多详细信息

标签: sql sql-server xml stored-procedures


【解决方案1】:

有很多方法可以做到这一点。我会告诉你一个我认为你会觉得最简单的方法。

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

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 表达式选择单个值即可。

【讨论】:

    猜你喜欢
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2020-12-11
    • 2012-11-25
    相关资源
    最近更新 更多