我试图在SQL查询中展平XML数据,但我似乎总是得到空值。
我尝试了here描述的交叉/外部应用方法。
包含XML数据的列称为Data
。
我猜测带有这些链接的xml数据是否需要以某种方式添加?
您能帮忙获得正确的SQL查询吗?
我试过查询:
SELECT
v.name
,pref.value('(LocalId/text())[1]', 'nvarchar(10)') as localid
FROM [database].[requests] v
outer apply v.Data.nodes('/DataForm') x(pref)
GO
该列中xml数据的示例:
<Dataform xmlns="http://somelongasslink.org/hasalsosomestuffhere" xmlns:i="http://somexlmschemalink/">
<DeleteDate xmlns="http://somelongasslink.org/hasalsosomestuffhere" i:nil="true" />
<LocalId xmlns="http://somelongasslink.org/hasalsosomestuffhere">5325325</LocalId>
...
答案 0 :(得分:2)
您可以使用此代码获取您正在寻找的结果:
;WITH XMLNAMESPACES(DEFAULT 'http://somelongasslink.org/hasalsosomestuffhere')
SELECT
rq.Name,
LocalID = TC.value('(LocalId)[1]', 'nvarchar(10)')
FROM
[database].[requests] rq
CROSS APPLY
rq.Data.nodes('/Dataform') AS TX(TC)
GO
您的代码存在两个问题:
您不尊重/包含在XML文档中定义的 XML命名空间
<Dataform xmlns="http://somelongasslink.org/hasalsosomestuffhere"
*******************************************************
您在调用.nodes()
时没有注意XML的区分大小写 - 您需要使用.nodes('/Dataform')
(不是{ {1}} - 您的XML中/DataForm
不大写)