我有一个带有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 ...
几种方法..