使用XML标记的SQL查询XML列?

时间:2015-05-05 15:47:37

标签: sql sql-server xml database xml-parsing

我的表格中列有各种不同的信息。名为CorrelationInfo的一列是XML,如下所示:

<Backlog xmlns:xsi = yadda yadda yadda>
    <Correlations>
      <MemCorrelation EID = "1234">
      </MemCorrelation>
    </Correlations>
</Backlog>

我需要一个可以计算EID = "1234"的行数的查询。

请注意:查询效率越高越好。有数千行要查询。

我自己尝试了一些东西,但我还在学习。这是我的工作:

Declare @myEID varchar(MAX)
SET @myID = "1234"

SELECT  COUNT(1)
FROM TABLE t
WHERE t.CorrelationInfo.exist('/Backlog/Correlations/MemCorrelation[text()= @myID') =1 

我有一些查询XML的经验,但是当where条件位于像MemCorrelation EID = "1234"这样的XML标记中时...

这适用于SQL Server 2008。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

    DECLARE @myID  int = 1234;
    SELECT  COUNT(*)
    FROM TABLE t
    WHERE t.CorrelationInfo.exist('/Backlog/Correlations/MemCorrelation[@EID=sql:variable("@myID")]') = 1

如果有一个元素MemCorrelation,其元素EID的值等于sql变量@myID的值,则存在将返回1

为了提高性能,我建议在桌面上至少创建一个主XML索引并试验辅助索引。

进一步阅读的参考资料:

sql:variable() function

predicates in path expressions

XML Indexes