我正在编写一个代码,该代码将包含按特定顺序排列的项目列表,并且我想随意重新排序它们。设置其实并不那么重要,但总而言之,它是一个带有 MSSQL 数据库的 Node 服务器。
为了演示,假设我们正在讨论以特定顺序显示的论坛类别。
Id | OrderNumber | Name
------------------------
1 | 1 | Rules
2 | 3 | Off-topic
5 | 2 | General
8 | 4 | Global
我已经处理了前端,这将允许我根据自己的喜好重新排序它们,问题是当我按下数据库上的保存按钮时会发生什么。
理想情况下,我希望将包含正确顺序的项目 ID 的 JavaScript 对象发送到将执行存储过程的服务器上的 API 端点。像这样的东西:
Data = {
IDs:"5,2,8,1"
}
有没有一种方法可以让我编写一个存储过程,它的唯一参数是 Id 列表,但它可以遍历该列表并执行一些我只能描述为以下伪代码的操作:
var Order = 1;
foreach ID in Data.IDs
UPDATE Categories SET OrderNum = Order WHERE Id = ID
Order = Order + 1
我最大的问题是我对高级 SQL 命令不太有经验,但这是我唯一需要帮助的部分,我已经处理了其他所有事情。感谢您的帮助。
最佳答案
示例
Declare @IDs varchar(max) = '5,2,8,1'
Update A
set OrderNumber=B.RetSeq
From YourTable A
Join (
Select RetSeq = row_number() over (order by (select null))
,RetVal = B.n.value('(./text())[1]', 'int')
From ( values (cast('<x>' + replace(@IDs,',','</x><x>')+'</x>' as xml) )) A(xmldata)
Cross Apply xmldata.nodes('x') B(n)
) B on A.ID=B.RetVal
更新表格
Id OrderNumber Name
1 4 Rules
2 2 Off-topic
5 1 General
8 3 Global
关于node.js - 如何编写对元素重新排序的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775723/