是否可以在列中操作xml?
问题描述:
我有一个表:是否可以在列中操作xml?
create table foo (id int, reportDef xml)
列reportDef
包含一个长XML字符串。
<Report>
<Criterias>
<Criteria name="Date Range">...</Criteria>
<Criteria name="Advertisers">
<Elements>
<Element name="CheckBoxOne">
<Value>0</Value>
</Element>
<Element name="ListViewAvailable">
<Value>314</Value>
<Value>57</Value>
<Value>18886</Value>
<Value>7437</Value>
</Element>
</Elements>
</Criteria>
<Criteria name="Revenue Types">...</Criteria>
</Criterias>
</Report>
对于那些元素标准的name属性是“广告”和元素元素的name属性是“ListViewAvailable”的情况下,我想删除的价值元素,其中的值是57和18886.所以,我有处理完成后, ,XML应该看起来像这样:
<Report>
<Criterias>
<Criteria name="Date Range">...</Criteria>
<Criteria name="Advertisers">
<Elements>
<Element name="CheckBoxOne">
<Value>0</Value>
</Element>
<Element name="ListViewAvailable">
<Value>314</Value>
<Value>7437</Value>
</Element>
</Elements>
</Criteria>
<Criteria name="Revenue Types">...</Criteria>
</Criterias>
</Report>
这是可能与SQL Server,特别是版本2005?到目前为止,我得到了提取可用值的查询,但不知道在哪里进行操作和更新列。
SELECT C.value('.', 'varchar(100)'), t.id
FROM foo t
CROSS APPLY t.reportDef.nodes('
/Report/Criterias/Criteria[@name="Advertisers"]
/Elements/Element[@name="ListViewAvailable"]
/Value
') Z(C)
答
这是您要找的吗?
DECLARE @foo TABLE(id INT,reportDef XML);
INSERT INTO @foo VALUES(1,
N'<Report>
<Criterias>
<Criteria name="Date Range">...</Criteria>
<Criteria name="Advertisers">
<Elements>
<Element name="CheckBoxOne">
<Value>0</Value>
</Element>
<Element name="ListViewAvailable">
<Value>314</Value>
<Value>57</Value>
<Value>18886</Value>
<Value>7437</Value>
</Element>
</Elements>
</Criteria>
<Criteria name="Revenue Types">...</Criteria>
</Criterias>
</Report>');
SELECT * FROM @foo;
UPDATE @foo SET reportDef.modify(N'delete /Report/Criterias/Criteria[@name="Advertisers"]/Elements/Element[@name="ListViewAvailable"]/Value[text()="57" or text()="18886"]');
SELECT * FROM @foo;
恐怕,这可能不是2005年的工作......在暂时无法检查...
+0
就是这样。谢谢!!! – AngryHacker
无法将其删除之前生成XML?在你的选择声明? – McNets
@McNets xml已经生成并位于数据库中。 – AngryHacker
看看替换值https://www.mssqltips.com/sqlservertip/2738/examples-of-using-xquery-to-update-xml-data-in-sql-server/ – McNets