2017-10-16 87 views
-2

我需要关于xQuery语法的帮助。使用xQuery检索带有xml列条件的表记录

我有一个与SQLType xml列declarde的表。

My table 我想创建一个SQL查询,使用XQuery,检索在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是一个列表?

+0

https://stackoverflow.com/help/mcve – Hogan

+0

没有表现出我们的实际(减少!)XML你不会得到帮助。在查询之前,用'WITH XMLNAMESPACES'('DEFAULT'lpi'')来说明就足够了。 – Shnugo

回答

0

根据意见更新。

XML是非常宽容的,同时也是特定的。如果您有拼写错误(拼写错误或大写小写错误匹配),它将不匹配,但不会给出错误。 ANYTHING是合法的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"] 

应评估真或假

+0

谢谢,但如果使用它作为: 选择a.ReadingId ,a.message_xml.exist( 'LoggedProductInfo/LoggedParameterInfo/LoggedDiagnosticObject/DiagnosticObject/TEA2Plus [@parameterCode = “P1ASV”]')AS parameterCodeExists 从MyTable的一个 为parameterCodeExists列返回的值是0,即使我知道有这样的parameterCode。 –

+1

如果我从XML复制的XPath我有以下几点: /LPI:LoggedProductInfo/LPI:LoggedParameterInfo/LPI:LoggedDiagnosticObject [1]/LPI:DiagnosticObject/LPI:TEA2Plus/@ parameterCode 可不可以这样一些特别的东西人们需要做的是由于那个lpi:LoggedDiagnosticObject [1]是一个列表? –