我有兩個表,XMLtable
和filterTable
。T-SQL查詢中的XPath
我需要所有從XMLtable
其中Col_X
數據包含MyElement
的XMLtable.ID
值,其中在filterTable
匹配filterColumn
內容。
在Col_X
的XML的每一行可以包含多個MyElement
的,我想的是在ID
情況下,任何這些元素的匹配任何值的filterColumn
。
問題是這些列實際上是varchar(max)
數據類型,而表本身是巨大的(如50GB巨大)。所以這個查詢需要儘可能優化。
下面是我現在在哪裏的示例,它僅返回第一個匹配元素等於我正在查找的行中的行。由於過多的不同錯誤消息,我無法將其更改爲與我想要的所有相同命名元素進行比較。
SELECT ID,
CAST(Col_X AS XML).value('(//*[local-name()=''MyElement''])', N'varchar(25)')
FROM XMLtable
...然後將結果與filterTable
進行比較。這已經花了5分鐘以上。
我想要實現的是一樣的東西:
SELECT ID
FROM XMLtable
WHERE CAST(Col_X AS XML).query('(//*[local-name()=''MyElement''])')
IN (SELECT filterColumn FROM filterTable)
我目前能做到這一點的唯一方法是使用LIKE操作,這需要像長一千倍。
現在,顯然它不是開始更改列或其他任何數據類型的選項。這是我必須與之合作的。 :)
你能告訴我們一個示例XML並解釋你想從中提取什麼嗎? –
我不得不做一個,因爲顯然我不能在這裏給真正的XML。它有幾十到幾百行的各種元素,其中MyElement可能會在0到X次之間出現。我想爲它出現的行找到ID,任何一個出現的實例都包含另一個表中的任何值。 – Kahn