【问题标题】:How select XML fields node for all rows如何为所有行选择 XML 字段节点
【发布时间】:2012-01-18 00:35:29
【问题描述】:

我有一张这样的桌子:

YEAR    int,
Fields  XML

我的 XML 列的所有行都具有这种结构,但具有不同的值:

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

YEAR         ID           NAME             LASTNAME
---------------------------------------------------
2011         1000         Nima               Agha
2011         1001         Begha              Begha
2011         1002         Jigha              Jigha
2011         1003         Aba                Aba
2012         1034         AAA                BBB
...

谢谢

【问题讨论】:

    标签: sql sql-server xml sql-server-2008 tsql


    【解决方案1】:

    这个怎么样:

     SELECT 
         Year,
         E.P.value('(ID)[1]', 'INT') AS 'ID',
         E.P.value('(Name)[1]', 'VARCHAR(50)') AS 'Name',
         E.P.value('(LastName)[1]', 'VARCHAR(50)') AS 'LastName'
     FROM 
         dbo.YourTable 
     CROSS APPLY
         Fields.nodes('/Employees/Person') AS E(P)
    

    您基本上是从基表中选择Year,然后从Fields 列中提取每个<Person> 节点到一个名为E 的“内联XML 表”中,其中包含一个名为P 的XML 列(您可以选择任何您喜欢的名称)再次查询并从中提取各个元素。

    【讨论】:

    • 没有CROSS APPLY,有什么方法可以选择我的字段吗?我想根据这个选择创建索引视图
    • @Nima:没有。 CROSS APPLY 是获取存储在 XML 列中的 所有 XML 元素的方法。我不知道还有什么办法
    • @Nima - 即使您可以在没有 CROSS APPLY 的情况下执行此操作,也不允许使用 XML 数据类型方法创建索引视图。
    • @Mikael Eriksson:考虑一下我不使用CROSS APPLY,只使用我的 XML 字段的第一个值。为什么我不能在上面创建索引视图?
    • @Nima 这是一个好问题,我真的不知道答案。当您想要索引视图时,它们有很多限制。也许您应该将其添加为关于 SO 的新问题。可能有人真正知道原因。
    猜你喜欢
    • 2020-08-28
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多