我公司的“联系人”表中有一个字段。在该表中,有一个 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 节点和使用 exist() 来测试节点是否包含我正在搜索的值。
有谁知道查询 XML 列的更好方法吗?
最佳答案
如果您正在进行一次写入和大量读取,请在写入时进行解析,并将该数据转换为某种更易于查询的格式。第一个建议是将它们解析为一个相关但独立的表,其中包含名称/值/联系人 ID 列。
关于sql-server - 在 SQL Server 2005 中查询 XML 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084/