如何在 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 命令(最后一条记录到第一条)?的主要内容,如果未能解决你的问题,请参考以下文章