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

时间:2019-01-08 20:15:53

标签: sql sql-server tsql

假设有以下XML数据,我想在工资中添加一个属性,例如$blogContainer.attr("data-page", nextPage).append($articles); setStyles($articles); // <---

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

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

    xml

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

1 个答案:

答案 0 :(得分:4)

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

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

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

    modify()
  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;

Live demo