sql server 从 XML 列获取特定数据

标签 sql sql-server xml xquery

嗨, friend 们,我在 sql server 2014 中有下表:

表[产品]

Serie,  Int (primary key column)
Name, varchar(100)
LeftMenu, xml

这是 LeftMenu 列中每行可能包含的 XML 示例:

<menu>
<e>
<col>1</col>
<url>
/products/pressure-relief/pressure-relief-valves/general-info
</url>
<IDElement>General-Info
</IDElement>
</e>
<e>
<col>2</col>
<url>
/products/pressure-relief/pressure-relief-valves/parts
</url>
<IDElement>parts
</IDElement>
</e>
</menu>

预期的结果是这样的

Serie | col | name
-------------------
1000  |  1  | parts

从给定的 Serie(主键)中,我想获取节点 <col> 的值传递 <IDElement> 的值标签。

这就像在每个 <IDElement> 中搜索在 XML 中返回 <col> 的值匹配该组元素的标记。

我正在尝试以下操作,但不知何故它不起作用:

select p.serie, p.name,
pref.value('(col())[1]', 'varchar(max)') as MenuName,
from prodInfo p 
p.[left-menu].nodes('menu/e') as names  (pref)
WHERE  
pre.value('(IDElement())[1]', 'varchar(max)') == @IDElement
AND p.serie =@serie

你能告诉我哪里出了问题吗?

我的合作伙伴建议的其他选项是像过去一样创建一个新表而不是使用 XML,有什么建议吗?

谢谢!

最佳答案

我评论了 WHERE to illustrate PARTS is Col 2,或者我完全误解了你的要求

Declare @YourTable table (Series int,Name varchar(100),LeftMenu xml)
Insert Into @YourTable values
(1000,'Some Series Name','<menu><e><col>1</col><url>/products/pressure-relief/pressure-relief-valves/general-info</url><IDElement>General-Info</IDElement></e><e><col>2</col><url>/products/pressure-relief/pressure-relief-valves/parts</url><IDElement>parts</IDElement></e></menu>')

Declare @Fetch varchar(100) = 'Parts'

Select A.Series
      ,B.*
 From  @YourTable A
 Cross Apply (
                Select  Col  = B.value('col[1]','int') 
                       ,Name = B.value('IDElement[1]','varchar(100)') 
                       ,URL  = B.value('url[1]','varchar(100)') 
                From LeftMenu.nodes('/menu') AS A(Grp)
                Cross Apply A.Grp.nodes('e') AS B(B)
                --Where  B.value('IDElement[1]','varchar(100)') = @Fetch
             ) B

返回

Series  Col Name            URL
1000    1   General-Info    /products/pressure-relief/pressure-relief-valves/general-info
1000    2   parts           /products/pressure-relief/pressure-relief-valves/parts

关于sql server 从 XML 列获取特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960944/

相关文章:

sql - 如何在 SSRS 中导出没有标题的 csv

sql-server - SQL Server Service Broker 服务消失(自动删除)?

java.lang.IllegalArgumentException : No SchemaFactory that implements the schema language specified by: http://www. w3.org/XML/XMLSchema/v1.1

android - alignParentBottom 使父级高度匹配父级

mysql - SQL 主键可以这样吗? (名单上的排名)

mysql - 使用 slice 执行 sql 准备语句

c# - 如何在数据库中保存 HTML 内容

python - 如何遍历lxml对象的节点来查看属性是否存在?

sql - 排除 NULL 值。为什么?

sql - Oracle 相当于 SQL Server/Sybase DateDiff