如何在 SQL 中向后运行 UPDATE 命令(最后一条记录到第一条)?

Posted

技术标签:

【中文标题】如何在 SQL 中向后运行 UPDATE 命令(最后一条记录到第一条)?【英文标题】:How do I run an UPDATE command in SQL backwards (last record to first)? 【发布时间】:2013-12-23 02:00:42 【问题描述】:

我实际上想在 Access 数据库中的表上运行 UPDATE 命令(通过 ADO.NET),但我希望它向后运行 - 即从最后一条记录到第一条 - 以避免相同的重复记录'ID'.

我尝试添加 & " ORDER BY ID DESC;" 但这会引发错误,因为它不允许。

救命!

谢谢 安迪

Dim dsxcmd As OleDbCommand

strSelect = "UPDATE Items SET ID=ID+1 WHERE ID>=" & lInsert.ToString 
dsxcmd = New OleDbCommand(strSelect, cn)
dsxcmd.ExecuteNonQuery()
dsxcmd.Dispose()

【问题讨论】:

【参考方案1】:

SQL 是声明性的。因此,如果您想以定义的顺序对更新进行排序,您需要执行游标操作(一次一行) - 使用记录集然后读取一行/写入一行循环。我认为 Access 没有服务器端游标,因此必须在客户端完成。

但是,如果您想同时更新多行,则需要先将它们更新到非冲突范围。

例如 - 首先将 ID 设为负数

UPDATE Items SET ID=ID * -1 WHERE ID>=...

然后更新

UPDATE Items SET ID=(ID *-1) + 1 WHERE ... change where to pick up the new range

【讨论】:

谢谢!如此简单,非常聪明!【参考方案2】:

为什么不创建一个记录集并循环遍历呢?更新是基于集合的,因此您无需像程序语言那样对记录进行逐步控制。

【讨论】:

我不知道您可以在 Access 上使用 CTE? ***.com/questions/763016/… 不知道为什么我认为这是通过Access连接的SQL Server。

以上是关于如何在 SQL 中向后运行 UPDATE 命令(最后一条记录到第一条)?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在python中向后打印一个单词? [复制]

如何在python中向后循环? [复制]

如何在 PyCharm 中向后调试?

我将如何在 kivy 中向后发送图像?

如何在Java中向后打印多个字符串

为啥必须在 C 中向后读取指针声明? [关闭]