sql-server - 在 SQL Server 2005 中查询 XML 列

标签 sql-server xml xquery

我公司的“联系人”表中有一个字段。在该表中,有一个 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/

相关文章:

c# - 使用 EF 的 DbContext.ExecuteSqlCommand() 进行交易时出现异常

sql-server - 如何在 SQL Server 2014 中将整数列转换为 varchar?

android - Phonegap 和 xml 文件到移动项目中的设计模式

java - 使用正确的配置突然得到 "NoSuchBeanDefinitionException no bean named"

xml - 如何创建嵌套约束?

xml - Xquery:开关函数中的情况表达式不起作用

sql - 如何找到当前时间段与任何表字段匹配?

sql-server - SQL 返回唯一数据

java - 使用 XPathFactory 评估 Xpath 属性

xquery - MarkLogic:将 cts:search 表达式绑定(bind)到变量