提问人:Xenex79 提问时间:10/13/2023 最后编辑:Yitzhak KhabinskyXenex79 更新时间:10/13/2023 访问量:54
更新 SQL 表中的 Xml 值
Update the Xml value in a SQL table
问:
在SQL中,我没有使用XML列和值的经验。
我需要更新(使用 SQL 查询)
<row note="49"> deadline detail</row>
阅读:
<row note="49"> Deadline Balance</row>
有多个具有不同 id 的笔记,就我而言,我只需要修改 id 为 49 的笔记。
该列的结构是这样的:
<rows>
<row nota="2">Contratto depositato [...] :-) </row>
<row nota="3">
Gli è stata concessa una dilazione.
Porre attenzione alle condizioni.
</row>
<row nota="49">deadline details</row>
</rows>
我试过这个:
UPDATE CF
SET NoteXML.modify('replace value of (/rows/row[@nota="49"]/text())[1] with "deadline detail"')
WHERE Cd_CF = 'C000001'
这是我得到的错误:
XQuery [CF.注意XML.modify()]: 运算符无法将“=”应用于操作数“xs:unsignedInt”和“xs:string”。
答:
0赞
Yitzhak Khabinsky
10/13/2023
#1
它似乎正在工作。
SQL算法
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, Cd_CF VARCHAR(10), NoteXML XML);
INSERT @tbl (Cd_CF, NoteXML) VALUES
('C000001', N'<rows>
<row nota="2">Contratto depositato [...] :-) </row>
<row nota="3">
Gli è stata concessa una dilazione.
Porre attenzione alle condizioni.
</row>
<row nota="49">deadline details</row>
</rows>');
-- DDL and sample data population, end
DECLARE @replaceWith VARCHAR(30) = 'Deadline Balance';
-- before
SELECT * FROM @tbl;
UPDATE @tbl
SET NoteXML.modify('replace value of (/rows/row[@nota="49"]/text())[1] with sql:variable("@replaceWith")')
WHERE Cd_CF = 'C000001';
-- after
SELECT * FROM @tbl;
输出
<rows>
<row nota="2">Contratto depositato [...] :-) </row>
<row nota="3">
Gli è stata concessa una dilazione.
Porre attenzione alle condizioni.
</row>
<row nota="49">Deadline Balance</row>
</rows>
评论
@nota=49
可能会更好deadline details
Deadline Balance
"deadline detail"