【问题标题】:Return list of all nodes from xml column in sql database从 sql 数据库中的 xml 列返回所有节点的列表
【发布时间】:2014-03-14 23:02:41
【问题描述】:

我正在开发一个 SQL 数据库,我需要一种方法来返回所有附有标签的产品的列表。这是我的 xml 的一个简单示例

<ArrayOfString>
  <string>fee</string>
  <string>activation</string>
</ArrayOfString>

我还有一个 ProductType 和 ProductID 列。我需要做的是提取某种产品类型的所有条目,并在 xml 列中列出不同的字符串。所以我需要看到的是……

------------------------------------------------
PRODUCTID     |      TAG       |  PRODUCT TYPE
------------------------------------------------
    1         |      fee       |   1
    1         |   activation   |   1  
    2         |      fee       |   1 
    3         |      fee       |   1

所以基本上如果该列中的 xml 有超过 1 个“字符串”节点,我需要知道每个节点,以及它附带的 productID。

我已经尝试使用 Tags.values() 和 Tags.query() 来获取我的值,并且我可以尽可能地接近它返回的值,例如...

------------------------------------------------
PRODUCTID     |      TAG       |  PRODUCT TYPE
------------------------------------------------
    1         | <string>fee</st|   1
    2         |      fee       |   1 
    3         |      fee       |   1

但这会将所有字符串集中在一个视图中...

另外,我试图解决这个问题,因为我可以做到这一点,并且想说

SELECT ProductID, Tags.query('/ArrayOfString/string') AS AttachedTags
FROM dbo.products 
WHERE ProductType = 1
    ORDER BY AttachedTags

但它说 AttachedTags 不是有效的列名...关于我是否先尝试按某些标签对其进行排序有什么想法吗?

【问题讨论】:

  • 嘿,marc_s,抱歉延迟了 - 我使用的是 MSS,感谢您更新我的标签!对于其他任何人,请参阅下面 JamieSee 的回答,了解交叉应用的一个很好的例子

标签: sql sql-server xml


【解决方案1】:

为了分解多个同名节点,您需要使用 CROSS APPLY:

SELECT ProductID, ProductTags.Tag.value('.', 'nvarchar(MAX)') AS AttachedTag
FROM dbo.products 
CROSS APPLY Tags.nodes('/ArrayOfString/string/text()') as ProductTags(Tag)
WHERE ProductType = 1
ORDER BY AttachedTag

【讨论】:

  • 老兄,你摇滚。我曾尝试过 CROSS APPLY,但我想我现在看到了我的问题。
【解决方案2】:

你也可以用作

从 YOUR_TABLE 中选择 YOUR_COLUMN.value('(YOUR_NODES)[1]','VARCHAR(100)')

喜欢

xml.value('(/form/NotesSection/Nt-Status)[1]','VARCHAR(100)')

【讨论】:

  • 嗯不是很有帮助。您只是在说明如何静态查询不是他所要求的 XML 字段。
猜你喜欢
  • 2022-01-03
  • 2012-09-23
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多