使用TSQL和XQuery从XML提取值

问题描述 投票:0回答:1

我有一个带有XML列的表。一些XML很大(8MB),但在这里我将展示该问题的简单版本。总的来说,我需要更新表,并找到XML树中已知位置XML包含名为<CompressedPart>的节点的那些行,取其值,对其进行base64解码,并用结果数据替换<CompressedPart>。 >

这个问题只是其中的第一部分,它试图在XML树中的某个点下提取文本。我以前曾经遇到过XQuery,它和现在看起来一样毁灭性的生命。

为此,我将XML简化为只有两个节点:

<GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
    <EnvelopeVersion>2.0</EnvelopeVersion>
</GovTalkMessage>

并且我只是试图获得值“ 2.0”。我使用的代码是:

SELECT  CAST('<GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
            <EnvelopeVersion>2.0</EnvelopeVersion>
        </GovTalkMessage>' AS XML).value('(/GovTalkMessage/EnvelopeVersion)[1]', 'VARCHAR(MAX)')

但是返回NULL。我试过删除/添加正斜杠,删除[1](这给出了令人难以置信的无用的错误消息“需要单例”)。无论我在XQuery中指定什么,我都会得到NULL或错误。

及时地,我将要在整个表中进行选择,如下所示,所以我不只是在寻找FROM子句中适用于单个XML变量的解决方案,正如我在其他示例中看到的那样。这种类型的东西:

SELECT  GOVTALK_XML_INPUT_DATA.value('(/GovTalkMessage/EnvelopeVersion)[1]', 'VARCHAR(MAX)')
FROM    dbo.IndividualSubmission

我该如何通过查询来解决问题的第一部分?

我有一个带有XML列的表。一些XML很大(8MB),但在这里我将展示该问题的简单版本。总的来说,我需要更新表并找到XML ...

sql-server tsql xquery
1个回答
1
投票

几种方法..

© www.soinside.com 2019 - 2024. All rights reserved.