【问题标题】:How to get all xml elements from a specific section of xml column using xpath?如何使用 xpath 从 xml 列的特定部分获取所有 xml 元素?
【发布时间】:2020-06-19 13:54:21
【问题描述】:

我有两个表 tblUser 和 tblUserPermissions,我需要 tblUser 中每个用户的以下 xml 列 (XmlData) 中的所有权限元素。每个 XmlData 中只有一个 userid 元素。

<User xmlns="">
  <userid>user1</userid>
  <permissions>
    <permission>per1</permission>
    <permission>per2</permission>
    <permission>per3</permission>
  </permissions>
  //Other elements here
</User>

我正在尝试这个查询。

SELECT u.UserID, UserPermissions.perm.value('permission', 'varchar(50)')
FROM tblUserPermissions up WITH (NOLOCK)
INNER JOIN tblUser u ON u.UserID = up.XmlData.value('(/User/userid)[1]', 'int')
cross apply up.XmlData.nodes('/User/permissions') AS UserPermissions (perm)

我怎样才能得到如下所示的结果?

UserID | Permission

user1 | per1
user1 | per2
user1 | per3
user2 | per1
user2 | per2
user3 | per1
user3 | per2
user3 | per3

我收到如下错误。知道在我的查询中需要更改什么吗?感谢您的任何建议!

XQuery [tblVORRequest.RequestXml.value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'

【问题讨论】:

  • 在一个临时表中导入 XML,然后比较并选择它

标签: sql tsql sql-server-2012


【解决方案1】:

从这个链接复制

XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'

虽然 XML 实例中只有一个 ProductID 属性,但静态类型规则要求您明确指定路径表达式返回单例。因此,在路径表达式的末尾指定了附加的 [1]。有关静态类型的更多信息,请参阅 XQuery 和静态类型。

所以要开始你,你需要做的就是这样。

DROP TABLE IF EXISTS #temp
CREATE TABLE #temp (test XML)

INSERT INTO #temp
(
    test
)
VALUES
('<User xmlns="">
  <userid>user1</userid>
  <permissions>
    <permission>per1</permission>
    <permission>per2</permission>
    <permission>per3</permission>
  </permissions>
  //Other elements here
</User>'
    )

SELECT UserPermissions.perm.value('permission[1]', 'varchar(50)')
FROM #temp up
cross apply up.test.nodes('/User/permissions') AS UserPermissions (perm)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2018-05-25
    • 1970-01-01
    • 2020-07-10
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多