[英]SQL Query Column with XML Data
我在列中有以下數據,如何查詢其中的值。
<deliveryPart notificationId="12345">
<message address="email@email.com" content="multipart/alternative" domain="email.com" format="0" id="159436637" recipient-id="098765" targetCode="__MAIN__">
<custom>
<recipient Nickname="mynickname" id="54321" />
<targetData Incident_Id="1509403" reference_nb="0000-0000" />
</custom>
</message>
</deliveryPart>
我快速瀏覽了一下,但之前從未做過,而且時間緊迫。
select top 10 *
from [db].[db].[table]
where mData.value('(deliveryPart/message/recipient-id)[1]','varchar(max)') like '098765'
我收到以下錯誤
消息4121,第16級,狀態1,第1行
找不到列“ mData”或用戶定義的函數或聚合“ mData.value”,或者名稱不明確。
UPDATE
我正在使用以下代碼來獲取xml值,並且可以正常工作
SELECT TOP 1000 B1.[mData].value('(deliveryPart/message/@id)[1]', 'NVARCHAR(MAX)') AS 'MessageID', B1.[mData].value('(deliveryPart/message/@address)[1]', 'NVARCHAR(MAX)') AS 'Address'
FROM (SELECT CAST(mData as XML) as xmlData FROM [dbo].[db].[table]) B0
CROSS APPLY xmlData.nodes('/') B1 (mData)
WHERE B1.[mData].value('(deliveryPart/message/@address)[1]', 'NVARCHAR(MAX)') LIKE '%@%'
並且它返回存儲在ntext字段中的xml值就好了。
180646774 email1@email.com
159436627 test2@hotmail.com
159436637 test3@hotmail.com
但是,我需要從mData列外部獲取值,而不是讓我這樣做。
您需要使用@recipient-id
作為XML 屬性 -而不是XML元素:
<message address="email@email.com" content="multipart/alternative"
domain="email.com" format="0" id="159436637"
recipient-id="098765" targetCode="__MAIN__">
************ this is an *attribute* - use the `@` to select it!
碼:
select top 10 *
from [db].[db].[table]
where mData.value('(deliveryPart/message/@recipient-id)[1]', 'varchar(max)') like '098765'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.