我已经做了更改您的查询被执行。
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