查询在sql服务器中只改变最后一条记录的值。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询在sql服务器中只改变最后一条记录的值。相关的知识,希望对你有一定的参考价值。

我在sql服务器上有一个带有XML数据类型的表。我想改变其中一个属性的值。该表看起来像。

id--------version-------XMLdata
1---------2--------------<Package version="1"> .... </Package>
2---------2--------------<Package version="1"> .... </Package>
3---------2--------------<Package version="1"> .... </Package>
and so on

我想把XML数据里面的版本更新为2,比如:

id--------version-------XMLdata
1---------2--------------<Package version="2"> .... </Package>
2---------2--------------<Package version="2"> .... </Package>
3---------2--------------<Package version="2"> .... </Package>
and so on

我运行了一个查询,就像:

UPDATE Tbl
SET XMLDATA.modify('replace value of (/Package[1]/@version)[1] with "2"')
WHERE version=2

但在输出中,我只看到最后一条记录的版本被修改为2.单个记录我也能更新,但不是所有记录一起更新。

UPDATE Tbl
SET XMLDATA.modify('replace value of (/Package[1]/@version)[1] with "2"')
WHERE id=1

但不是所有记录一起更新。我不明白这背后的原因是什么,我试着创建了一个名为Tbl2的表的副本,在那里,查询正在更新XML数据中的所有记录版本,可能的依赖关系是什么,它停止了查询以改变版本属性值?

答案

.modify() 是非常有限的,它允许每次调用只做一次更改,但这应该能达到预期的效果。试试这个。

DECLARE @tbl TABLE (id INT,[version] INT, XMLdata XML);
INSERT INTO @tbl VALUES
 (1,2,'<Package version="1"> .... </Package>')
,(2,2,'<Package version="1"> .... </Package>')
,(3,2,'<Package version="1"> .... </Package>');

UPDATE @tbl SET XMLdata.modify('replace value of (/Package/@version)[1] with 2')
WHERE [version]=2;

SELECT * FROM @tbl;

你可以用 sql:column("version") 而不是 2 悄无声息 WHERE 在一次调用中设置所有XML版本属性与表的版本列同步。

UPDATE @tbl SET XMLdata.modify('replace value of (/Package/@version)[1] with sql:column("version")');

以上是关于查询在sql服务器中只改变最后一条记录的值。的主要内容,如果未能解决你的问题,请参考以下文章

将表单框中的值插入表格的最后一条记录

从 SQL Server 中的每个表中只复制一条记录

SQL Server 如何查询最后一条记录

如何在数据库中查询出重复记录

在 Hibernate 中只获取最后一条记录,但我想要所有记录

Python查询sql db中的最后一条记录,但返回空白记录