【发布时间】:2020-02-06 20:36:25
【问题描述】:
因此,在 M$SQL 2014 企业数据库中使用以下内容:
DECLARE @table TABLE (XmlCol XML)
INSERT INTO @table (XmlCol) VALUES ('
<DEFeatureClassInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.8" xsi:type="typens:DEFeatureClassInfo">
<GPFieldInfoExs xsi:type="typens:ArrayOfGPFieldInfoEx">
<GPFieldInfoEx xsi:type="typens:GPFieldInfoEx">
<Name>UNITCODE</Name>
<AliasName>UNITCODE</AliasName>
<ModelName>UNITCODE</ModelName>
<FieldType>esriFieldTypeString</FieldType>
<IsNullable>true</IsNullable>
<Required>true</Required>
</GPFieldInfoEx>
<GPFieldInfoEx xsi:type="typens:GPFieldInfoEx">
<Name>REGIONCODE</Name>
<AliasName>REGIONCODE</AliasName>
<ModelName>REGIONCODE</ModelName>
<DomainName>DOM_REGIONCODE_NPS2016</DomainName>
<FieldType>esriFieldTypeString</FieldType>
<DefaultValueString>SER</DefaultValueString>
<IsNullable>true</IsNullable>
<Required>true</Required>
</GPFieldInfoEx>
<GPFieldInfoEx xsi:type="typens:GPFieldInfoEx">
<Name>CREATEUSER</Name>
<AliasName>CREATEUSER</AliasName>
<ModelName>CREATEUSER</ModelName>
<FieldType>esriFieldTypeString</FieldType>
<DefaultValueString>GRSM User</DefaultValueString>
<IsNullable>true</IsNullable>
<Required>true</Required>
</GPFieldInfoEx>
</GPFieldInfoExs>
</DEFeatureClassInfo>')
我想根据条件删除一个(元素?节点?)。在我粘贴的示例中,我有 3 个元素都带有
<Required>true</Required>
我想做的是删除
<Required>true</Required>
仅当
<Name>CREATEUSER</Name>
存在于同一个元素中(我可能在这里混淆了节点和元素)。
换句话说,这是一个 XML 列,它为一个表定义了一个 DB 模式,我有数百个表需要修改 XML 模式定义,这样无论何时 CREATEUSER 出现,true 都会被删除(不会更改或替换)。
到现在为止
SELECT *
FROM GDB_ITEMS
WHERE GDB_ITEMS.Definition.exist(N'//Name[text()="CREATEUSER"]') = 1;
这花了我 4 个小时的谷歌搜索,并至少向我展示了我的数据库中的哪些表在 XML 模式定义中具有 CREATEUSER。只需要触摸所有这些并删除 true。澄清一下,在其他情况下,我不想删除 true。在上面发布的同一个示例中,我们看到“UNITCODE”节点中存在 true,并且 true 不能被删除/删除。我只想在与 CREATEUSER 关联时删除 true。
【问题讨论】:
-
请根据输入的 XML 共享所需的输出。
标签: sql-server xml tsql xml-parsing