繁体   English   中英

如何将属性插入保存为nvarchar(max)的xml数据中

[英]How to insert an attribute into xml data which is saved as nvarchar(max)

假设有以下XML数据,我想向薪金中添加一个属性,例如currency="INR"

<employee>
    <salary amount="6000"/>
</employee>
  1. 如果此数据存储在XML类型的列中,则仅通过使用以下代码段即可轻松添加另一个属性:

     UPDATE TABLENAME SET COLUMNNAME.modify('insert attribute currency{"INR"} into (/employee/salary)[1]') 
  2. 并且如果此数据存储在类型为nvarchar(max)的列中,则即使将数据转换为xml之后,以下查询也不起作用:

     UPDATE TABLENAME SET CAST(CAST(COLUMNNAME AS VARCHAR(MAX)) AS XML).modify('insert attribute currency{"INR"} into (/employee/salary)[1]') 

因此,请帮助我解决第二点,因为我有一个列为nvarchar,并且需要在保存的xml数据中插入一个属性。

modify() Method仅直接与变量/列一起使用,并且只能在SET子句中使用。

因此,要解决此问题,因为您将数据存储为NVARCHAR ,则有两种选择:

  1. 更改表并添加具有XML数据类型的新列,将数据从列中移至该列,然后使用modify() UPDATE数据

  2. 创建/声明一个表以将数据存储为XML并执行UPDATE

这是您提供的示例:

CREATE TABLE T
(
  Value NVARCHAR(MAX)
);

INSERT INTO T
SELECT N'<employee>
           <salary amount="6000"/>
         </employee>';

DECLARE @V XML;

SELECT @V = CAST(Value AS XML)
FROM T;

SET @V.modify('insert attribute currency{"INR"} into (/employee/salary)[1]');

UPDATE T
SET Value = CAST(@V AS NVARCHAR(MAX));

SELECT * FROM T;

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM