【发布时间】:2015-04-08 17:05:43
【问题描述】:
我在一列中有如下数据,如何查询里面的值。
<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”,或者名称不明确。
更新
我正在使用以下代码来获取 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 列之外获取值并且不允许我这样做。
【问题讨论】:
标签: sql xml sql-server-2008