我正在编写一个将按特定顺序列出项目的代码,我想随意对它们进行重新排序。设置实际上并不那么重要,但总而言之,它是具有MSSQL数据库的节点服务器。
为演示起见,可以说我们正在讨论按特定顺序显示的论坛类别。
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"
}
有没有一种方法可以对一个存储过程进行编程,该存储过程的唯一参数是Ids列表,但是它可以遍历该列表并执行某些操作,我只能将其描述为以下伪代码:
var Order = 1;
foreach ID in Data.IDs
UPDATE Categories SET OrderNum = Order WHERE Id = ID
Order = Order + 1
我最大的问题是我对高级SQL命令不是很熟悉,但这是我唯一需要帮助的部分,我已经处理了其他所有内容。谢谢您的帮助。
答案 0 :(得分:1)
示例
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