我的表格中列有各种不同的信息。名为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。
答案 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索引并试验辅助索引。
进一步阅读的参考资料: