[英]sql server getting specific data from XML column
嗨朋友我在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>
標記的值。
這就像在XML中的每個<IDElement>
內部進行搜索一樣,並返回與該組元素匹配的<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來說明PARTS是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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.