2017-10-16 112 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]是一個列表? –