使用xQuery在xml列上检索具有条件的表记录

时间:2017-10-16 15:21:08

标签: sql sql-server xml xquery xquery-sql

我需要xQuery语法的帮助。

我有一个带有SQLType xml列声明的表。

My table 我想使用xQuery创建一个sql查询来检索xml包含任何元素的表记录,在xPath中,它的属性parameterCode =“一个特定的字符串”

xPath是:LoggedProductInfo / LoggedParameterInfo / LoggedDiagnosticObject / DiagnosticObject / TEA2Plus / @ parameterCode

xml很复杂,包含序列,选择等。 My schema

我非常擅长SQL,但是当谈到xQuery时我很失落,所以我很感激能得到的任何帮助。

来自评论

如果我使用

 select a.ReadingId ,
        a.message_xml.exist('LoggedProductInfo/LoggedParameterInfo/L‌​oggedDiagnosticObjec‌​t/DiagnosticObject/T‌​EA2Plus[@parameterCo‌​de = "P1ASV"]') 
     AS parameterCodeExists
 from MyTable a 

列parameterCodeExists返回的值为0,即使我知道有这样的parameterCode。

flag

如果我从xml复制xPath,我将拥有以下内容:

/lpi:LoggedProductInfo/lpi:LoggedParameterInfo/lpi:LoggedDia‌​gnosticObject[1]/lpi‌​:DiagnosticObject/lp‌​i:TEA2Plus/@paramete‌​rCode

由于lpi,它是否需要做一些特别的事情:LoggedDiagnosticObject 1是一个列表?

1 个答案:

答案 0 :(得分:0)

根据评论进行更新。

  

XML非常宽容,同时具体。如果您有拼写错误(错误拼写或大写小写错误匹配),则不匹配但不会出错。任何东西都是合法的XML,它可能不是你文件中的内容。这就是使用XML时架构和验证如此重要的原因。

我相信以下内容会做你想要的,但是因为你没有向我们展示你的实际XML文件,所以我很难测试。

select a.ReadingId
WHERE   a.message_xml.exist('/lpi:LoggedProductInfo/lpi:LoggedParameterInfo/lpi:LoggedDia‌​gnosticObject[1]/lpi‌​:DiagnosticObject/lp‌​i:TEA2Plus[@parameterCo‌​de = "P1ASV"]')
from MyTable a 

-

原始答案。

提示:在xquery中检查上述级别的条件。例如,

LoggedProductInfo/LoggedParameterInfo/LoggedDiagnosticObject/DiagnosticObject/TEA2Plus[@parameterCode = "a specific string"]

应评估真或假

相关问题