tsql – 使用xpath从xml数据库列中选择多行(可能没有游标?)

假设我有下表(其中History是xml列):
Id      Value     History
1       "Hello"   <History>
                    <Node date="1-1-2011">World</Node>
                    <Node date="1-2-2011">Foo</Node>
                    <Node date="1-3-2011">Bar</Node>
                  </History>
2       "Baz"     <History>
                    <Node date="1-1-2011">Buzz</Node>
                    <Node date="1-2-2011">Fizz</Node>
                    <Node date="1-3-2011">Beam</Node>
                  </History>

从那以后我想选择一个新表,如:

HistoryId   Id      Value       Date
1           1       "World"     1-1-2011
2           1       "Foo"       1-2-2011
3           1       "Bar"       1-3-2011
4           2       "Buzz"      1-1-2011
5           2       "Fizz"      1-2-2011
6           2       "Beam"      1-3-2011

我该怎么办?

如果它只是一个独立的xml值,我可以做这样的事情:

DECLARE @xml2 XML = '
<History>
  <Node date="1-1-2011">World</Node>
  <Node date="1-2-2011">Foo</Node>
  <Node date="1-3-2011">Bar</Node>
</History>'

SELECT 
    x.value('(@date)[1]','date') AS [Date],x.value('.','nvarchar(50)') AS Value
FROM @xml2.nodes('/History/Node') temp(x)

但是当XML数据是表列的一部分时,我不确定如何做到这一点.我可能想办法用光标强制执行它,但我想知道是否有更优雅的声明性解决方案,我不知道.

使用交叉申请
declare @T table (Id int,Value nvarchar(50),History xml)
insert into @T values (1,'Hello','
<History>
  <Node date="1-1-2011">World</Node>
  <Node date="1-2-2011">Foo</Node>
  <Node date="1-3-2011">Bar</Node>
</History>')
insert into @T values (2,'Baz','
<History>
  <Node date="1-1-2011">Buzz</Node>
  <Node date="1-2-2011">Fizz</Node>
  <Node date="1-3-2011">Beam</Node>
</History>')

select
    Id,h.n.value('.','varchar(10)') as Value,h.n.value('@date','varchar(10)') as Date
from @T
    cross apply history.nodes('History/Node') h(n)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇