我有一个包含XML列的表,其中包含2个具有大base64字符串(图像)的节点。当我查询数据库时,我想从返回给客户端的xml中删除这两个节点。我无法更改表的架构(即我无法拆分列中的数据)。如何使用select语句从xml列中删除2个节点? (要删除的节点都在其名称中包含文本“Image”)。任何单个查询都可以返回最多1000条记录。
目前,我的查询基本上是这样的:
select top 1000 [MyXmlData] from [MyTable]
MyXmlData列包含如下所示的xml:
<MyXml>
<LotsOfNodes></LotsOfNodes>
...
<ANode>
...
<MyImage1></MyImage1> <!-- remove this from returned xml -->
<MyImage2></MyImage2> <!-- remove this from returned xml -->
...
</ANode>
...
<LotsOfNodes></LotsOfNodes>
...
</MyXml>
我正在使用SQL Server 2008。
答案 0 :(得分:3)
这是在SQL Server上测试的
您可以将查询结果存储到临时表或表变量中,并使用modify() delete Image
个declare @T table(XmlData xml)
insert into @T values
('<MyXml>
<LotsOfNodes></LotsOfNodes>
<ANode>
<MyImage1></MyImage1> <!-- remove this from returned xml -->
<MyImage2></MyImage2> <!-- remove this from returned xml -->
</ANode>
<LotsOfNodes></LotsOfNodes>
</MyXml>')
update @T set
XmlData.modify('delete //*[contains(local-name(.), "Image")]')
select *
from @T
个节点。使用contains()和local-name()确定是否应删除节点。
<MyXml>
<LotsOfNodes />
<ANode>
<!-- remove this from returned xml -->
<!-- remove this from returned xml -->
</ANode>
<LotsOfNodes />
</MyXml>
结果:
{{1}}