我已經做了更改您的查詢被執行。
DECLARE @xml xml
SET @xml = (select thingDataXML from ThingData where thingDataID = 3)
;WITH XMLNAMESPACES(DEFAULT 'http://www.testing.org/a/b/c/d123')
SELECT
t.[thingID]
, t.[thingValue]
, CONVERT(XML,td.[thingDataXML]).value('(/anItem/a1/b1/c1/text())[1]','Varchar(1)') as xmlValue
FROM Things t
join ThingData td
on td.[thingDataID] = t.[thingDataID]
這應該從你主表連接到包含XML表,然後將retreive的一個值,在XML的你,請注意,如果您想爲一排,你需要返回多個值要麼是答案的答案,要麼是決定一個交叉聯盟,然後使用其他數據集的數據來執行一些邏輯。
編輯:
你的問題的答案將是雙方都有一個用例中,交叉連接他發現上面創建一個入店表來查詢其使用更多一點點的內存,同時運行查詢,但可以訪問很多次,其中正常的xquery值函數只讀取一個只能從xml讀取單個值的節點。
如果您想從xml中構建表格數據,交叉連接將是解決方案。
謝謝,我同意列類型,但不幸的是,這不是我自己。我剛想出了一個不同的解決方案(在最終在這裏找到更相關的問題後),它看起來就像下面的Hano。我最初認爲答案需要像您正在使用的CROSS APPLY,但是Hano和我有什麼不這樣做。你能解釋我們的解決方案之間的差異,僅僅是爲了我自己的教化嗎? – jrut127
最大的區別是CROSS APPLY允許你從XML中檢索多個節點(例如,你想爲每一行提取兩個c1的值);如果你能保證你一次只想拉一個節點,Hano的建議就沒有問題。 –
很高興知道,感謝您的幫助。 – jrut127