我需要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/LoggedDiagnosticObject/DiagnosticObject/TEA2Plus[@parameterCode = "P1ASV"]')
AS parameterCodeExists
from MyTable a
列parameterCodeExists返回的值为0,即使我知道有这样的parameterCode。
flag
如果我从xml复制xPath,我将拥有以下内容:
/lpi:LoggedProductInfo/lpi:LoggedParameterInfo/lpi:LoggedDiagnosticObject[1]/lpi:DiagnosticObject/lpi:TEA2Plus/@parameterCode
由于lpi,它是否需要做一些特别的事情:LoggedDiagnosticObject 1是一个列表?
答案 0 :(得分:0)
根据评论进行更新。
XML非常宽容,同时具体。如果您有拼写错误(错误拼写或大写小写错误匹配),则不匹配但不会出错。任何东西都是合法的XML,它可能不是你文件中的内容。这就是使用XML时架构和验证如此重要的原因。
我相信以下内容会做你想要的,但是因为你没有向我们展示你的实际XML文件,所以我很难测试。
select a.ReadingId
WHERE a.message_xml.exist('/lpi:LoggedProductInfo/lpi:LoggedParameterInfo/lpi:LoggedDiagnosticObject[1]/lpi:DiagnosticObject/lpi:TEA2Plus[@parameterCode = "P1ASV"]')
from MyTable a
-
原始答案。
提示:在xquery中检查上述级别的条件。例如,
LoggedProductInfo/LoggedParameterInfo/LoggedDiagnosticObject/DiagnosticObject/TEA2Plus[@parameterCode = "a specific string"]
应评估真或假