6
我有一列ntext数据类型和NOT XML。它存储所有的XML数据。我需要更新记录中的xml节点。它会抛出一个错误,指出“错误地使用xml数据类型方法'modify'。在此上下文中,预计将使用非增变方法。”SQL更新查询根据xml节点值更新记录中的xml?
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
示例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>
它会抛出一个错误“错误地使用xml数据类型方法'modify'。在这种情况下,期望非mutator方法。当我修改为单个更新查询与表和不使用临时表.... – DotNetDeveloper 2011-05-11 02:04:45
如果一个直接更新查询不起作用..你可以发布一些示例为“你可以通过加入更新的临时更新原始表表到键上的原始表“。 – DotNetDeveloper 2011-05-11 02:06:31
我已更新上述代码与您的解决方案,以便我可以得到最近的一个,并感谢您的时间 – DotNetDeveloper 2011-05-11 02:15:20