当前位置:  开发笔记 > 数据库 > 正文

选择XML节点作为行

如何解决《选择XML节点作为行》经验,为你挑选了1个好方法。

我从一个使用T-SQL的XML列中选择一个表.我想选择某种类型的节点,并为每个节点创建一行.

例如,假设我从人员表中进行选择.该表具有地址的XML列.XML的格式类似于以下内容:

Street 1 City 1 State 1 Zip Code 1
Street 2 City 2 State 2 Zip Code 2

我怎样才能得到这样的结果:

         城市         

Joe Baker西雅图华盛顿

Joe Baker Tacoma WA

弗雷德琼斯温哥华BC



1> leoinfo..:

这是你的解决方案:

/* TEST TABLE */
DECLARE @PEOPLE AS TABLE ([Name] VARCHAR(20),  [Address] XML )
INSERT INTO @PEOPLE SELECT 
    'Joel', 
    '
Street 1 City 1 State 1 Zip Code 1
Street 2 City 2 State 2 Zip Code 2
' UNION ALL SELECT 'Kim', '
Street 3 City 3 State 3 Zip Code 3
' SELECT * FROM @PEOPLE -- BUILD XML DECLARE @x XML SELECT @x = ( SELECT [Name] , [Address].query(' for $a in //address return
') FROM @PEOPLE AS people FOR XML AUTO ) -- RESULTS SELECT [Name] = T.Item.value('../@Name', 'varchar(20)'), street = T.Item.value('@street' , 'varchar(20)'), city = T.Item.value('@city' , 'varchar(20)'), state = T.Item.value('@state' , 'varchar(20)'), zipcode = T.Item.value('@zipcode', 'varchar(20)') FROM @x.nodes('//people/address') AS T(Item) /* OUTPUT*/ Name | street | city | state | zipcode ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Joel | Street 1 | City 1 | State 1 | Zip Code 1 Joel | Street 2 | City 2 | State 2 | Zip Code 2 Kim | Street 3 | City 3 | State 3 | Zip Code 3


搜索了一段时间,直到我找到了这个很好的例子.Kudos leoinfo!
推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有