在 sql 中输入 xml - 这可能吗?

发布于 2024-10-06 08:38:15 字数 634 浏览 2 评论 0原文

我有一个带有类型化 XML 字段的表。典型的 XML 格式是:

<root>
  <users>
      <user name="John Doe" />
      <user name="Alexander" />
   </users>
   <apps>
      <app name="Office 2010" />
      <app name="SQL Server 2005" />
   <apps>
</root>

假设该表有 25 行,users 和 apps 元素中的值不同,有没有办法:

  1. 检索 /root/users 元素中所有记录的所有用户列表。
  2. 检索所有记录的所有用户+应用程序的列表。

此行上的 SQL 可以工作,但只给我第一个用户名。

SELECT xtbl.col1.value('(user/@name)[1]', 'varchar(100)') 
FROM mytable
     CROSS APPLY xmlcol.nodes('/root/users') AS xtbl(col1)

I've a table with a typed XML field. Typical XML format is:

<root>
  <users>
      <user name="John Doe" />
      <user name="Alexander" />
   </users>
   <apps>
      <app name="Office 2010" />
      <app name="SQL Server 2005" />
   <apps>
</root>

Assuming this table has 25 rows with different values in the users and apps elements, is there a way to:

  1. Retrieve the list of all users in the /root/users element for all the records.
  2. Retrieve the list of all users + application for all the records.

SQL on this line works but gives me only first user name.

SELECT xtbl.col1.value('(user/@name)[1]', 'varchar(100)') 
FROM mytable
     CROSS APPLY xmlcol.nodes('/root/users') AS xtbl(col1)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

向地狱狂奔 2024-10-13 08:38:15

nodes 函数为每个用户 选择一行,但您正在寻找每个用户 一行。尝试:

SELECT xtbl.col1.value('(@name)[1]', 'varchar(100)') 
FROM mytable
     CROSS APPLY xmlcol.nodes('/root/users/user') AS xtbl(col1)

The nodes function is selecting one row per users, but you're looking for one row per user. Try:

SELECT xtbl.col1.value('(@name)[1]', 'varchar(100)') 
FROM mytable
     CROSS APPLY xmlcol.nodes('/root/users/user') AS xtbl(col1)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文