我公司的“联系人”表中有一个字段。在该表中,有一个 XML 类型的列。该列包含有关特定联系人的杂项数据。例如。
<contact>
<refno>123456</refno>
<special>a piece of custom data</special>
</contact>
对于每个联系人,下面的标签contact
可能不同,我必须在同一个表中的关系数据列旁边查询这些片段。
我使用了以下结构:
SELECT c.id AS ContactID,c.ContactName as ForeName,
c.xmlvaluesn.value('(contact/Ref)[1]', 'VARCHAR(40)') as ref,
INNER JOIN ParticipantContactMap pcm ON c.id=pcm.contactid
AND pcm.participantid=2140
WHERE xmlvaluesn.exist('/contact[Ref = "118985"]') = 1
此方法可以正常工作,但是服务器需要一段时间才能响应。我还研究了使用 nodes() 函数来解析 XML 节点并使用 exists() 来测试节点是否包含我正在搜索的值。
有谁知道查询 XML 列的更好方法?