我有一个ntext数据类型的列,不是XML。它存储所有的XML数据。我需要根据XML节点值获取记录。
=>输入值为CpsiaId = 456,应该返回所有具有此值的记录在XML中。
我尝试了
我尝试了
select * from tableName
where convert(xml,column_name).value('data((/root/ProductInformation/CPSIA/CpsiaDetails/Item/CpsiaId)[1])','int') = 456
,但它没有起作用......有什么想法或其他方法可以根据XML节点值获取记录。
示例Xml:
<root>
<ProductInformation>
<Name> Truck with Battery Charger</Name>
<Description>Fr.</Description>
<CPSIA>
<CpsiaDetails>
<Item>
<CpsiaId>456</CpsiaId>
<CpsiaMessage>waring</CpsiaMessage>
</Item>
<Item>
<CpsiaId>236</CpsiaId>
<CpsiaMessage>to health</CpsiaMessage>
</Item>
</CpsiaDetails>
</CPSIA>
</ProductInformation>
</root>
CROSS APPLY
创建了许多虚拟行,并且需要对XML数据进行更多的XQuery运行和转换(value
方法)。但有时优化器的工作方式很神秘...如果您需要经常运行此查询以获得更好的性能,则可能需要查看XML索引。 - Luceromodify()
方法来实现。但是,只要您的列是ntext
,这将不太容易实现。 - Lucero