Sql 如何在保存为nvarchar(max)的xml数据中插入属性
假设有以下XML数据,我想在工资中添加一个属性,如Sql 如何在保存为nvarchar(max)的xml数据中插入属性,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设有以下XML数据,我想在工资中添加一个属性,如currency=“INR”: 如果此数据存储在nvarchar(max)类型的列中,则即使将数据转换为xml,以下查询也不起作用: UPDATE TABLENAME SET CAST(CAST(COLUMNNAME AS VARCHAR(MAX)) AS XML).modify('insert attribute currency{"INR"} into (/employee/salary)[1]') 因此,请帮助我解决第二点,因为我有
currency=“INR”
:
nvarchar(max)
类型的列中,则即使将数据转换为xml
,以下查询也不起作用:
UPDATE TABLENAME
SET CAST(CAST(COLUMNNAME AS VARCHAR(MAX)) AS XML).modify('insert attribute currency{"INR"} into (/employee/salary)[1]')
SET
子句中使用
因此,要解决这个问题,因为您将数据存储为NVARCHAR
,您有两个选择:
XML
datatype添加一个新列,将数据从列移动到该列,然后使用modify()
XML
,并执行更新
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;
创建表T
(
值NVARCHAR(最大值)
);
插入T
选择N'
';
声明@V XML;
选择@V=CAST(值为XML)
从T;
设置@V.modify('insert attribute currency{“INR”}到(/employee/salary)[1]');
更新T
设定值=铸造(@V为NVARCHAR(最大));
从T中选择*;
只能直接与变量/列一起使用,并且只能在集合
子句中使用
因此,要解决这个问题,因为您将数据存储为NVARCHAR
,您有两个选择:
XML
datatype添加一个新列,将数据从列移动到该列,然后使用modify()
XML
,并执行更新
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;
创建表T
(
值NVARCHAR(最大值)
);
插入T
选择N'
';
声明@V XML;
选择@V=CAST(值为XML)
从T;
设置@V.modify('insert attribute currency{“INR”}到(/employee/salary)[1]');
更新T
设定值=铸造(@V为NVARCHAR(最大));
从T中选择*;
是的-这里有什么问题吗!?!?!?嗨,marc_s,谢谢你快速查看。现在,我已经更新了我的问题。我知道它应该是XML类型,并且肯定会更改为XML,但是如果,它即将这样做,那么会发现这是一个挑战,但无法理解原因,因此,将其发布在这里,并了解如何解决。是的,第一个对我来说很好。你已经知道,唯一的答案是将其更改为XML。同时,最简单的可能是一个简单的
替换(COLUMNNAME,'salary amount=“”,'salary currency=“INR”amount=“”)
…是的-这里有什么问题吗!?!?!?嗨,marc_s,谢谢你快速查看。现在,我已经更新了我的问题。我知道它应该是XML类型,并且肯定会更改为XML,但是如果,它即将这样做,那么会发现这是一个挑战,但无法理解原因,因此,将其发布在这里,并了解如何解决。是的,第一个对我来说很好。你已经知道,唯一的答案是将其更改为XML。同时,最简单的可能是一个简单的替换(COLUMNNAME,'salary amount=“”,'salary currency=“INR”amount=“”)
。。。
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;