[英]SQL Update query to update xml in records based on xml node value?
I have a column of ntext data type and NOT XML. 我有一列ntext数据类型和非XML。 It stores all xml data.
它存储所有xml数据。 I need to update xml node in the records.
我需要更新记录中的xml节点。 It throws an error saying "Incorrect use of the xml data type method 'modify'. A non-mutator method is expected in this context."
它抛出一个错误,说“错误使用xml数据类型方法'修改'。在此上下文中应该使用非mutator方法。”
begin transaction
declare @Cps_Id int;
set @Cps_Id = 236;
declare @Cps_Message nvarchar(1024);
set @Cps_Message = 'updating cpsia message with smoking';
update table_name
set column_name = CONVERT(xml,column_name).modify('replace value of (/root/ProductInformation/CPSIA/CpsiaDetails/Item[CpsiaId=sql:variable("@Cps_Id")]/CpsiaMessage/text())[1] with sql:variable("@Cps_Message")')
WHERE Convert(xml,column_name).exist('/root/ProductInformation/CPSIA/CpsiaDetails/Item[CpsiaId=sql:variable("@Cps_Id")]')=1
rollback
Sample XML: 示例XML:
<root>
<ProductInformation>
<Name> Truck with Battery Charger</Name>
<Description>Fr.</Description>
<CPSIA>
<CpsiaDetails>
<Item>
<CpsiaId>456</CpsiaId>
<CpsiaMessage>waring</CpsiaMessage>
</Item>
<Item>
<CpsiaId>236</CpsiaId>
<CpsiaMessage>to health</CpsiaMessage>
</Item>
</CpsiaDetails>
</CPSIA>
</ProductInformation>
</root>
You need to use the modify method on the XML data type. 您需要对XML数据类型使用modify方法。
begin transaction
declare @Cps_Id int;
set @Cps_Id = 236;
declare @Cps_Message nvarchar(1024);
set @Cps_Message = 'updating cpsia message with smoking';
select id, CONVERT(xml,[text]) txt into #tmp from SO5954359
select * from #tmp
update #tmp
set txt.modify('replace value of (/root/ProductInformation/CPSIA/CpsiaDetails/Item[CpsiaId=sql:variable("@Cps_Id")]/CpsiaMessage/text())[1] with sql:variable("@Cps_Message")')
select * from #tmp
drop table #tmp
rollback
You could then update the original table by joining the updated temporary table to the original table on the key. 然后,您可以通过将更新的临时表连接到密钥上的原始表来更新原始表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.