Node.js 如何为重新排序的元素编写查询

Node.js 如何为重新排序的元素编写查询,node.js,sql-server,stored-procedures,Node.js,Sql Server,Stored Procedures,我正在编写一个代码,它将有一个特定顺序的项目列表,我想随意对它们重新排序。设置并不是很重要,但总而言之,它是一个带有MSSQL数据库的节点服务器 为了便于演示,让我们假设我们正在讨论按特定顺序显示的论坛类别 Id | OrderNumber | Name ------------------------ 1 | 1 | Rules 2 | 3 | Off-topic 5 | 2 | General 8 | 4

我正在编写一个代码,它将有一个特定顺序的项目列表,我想随意对它们重新排序。设置并不是很重要,但总而言之,它是一个带有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"
}
是否有一种方法可以编写一个存储过程,它的唯一参数是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

你必须在这里解释很多。什么定义了“正确的顺序”?你到底在挣扎什么?我强烈建议你阅读你的问题,假装你对你的项目一无所知,看看你是否能够回答这个问题。@SeanLange想象一个有多个部分/类别等的论坛。每个类别按特定顺序显示。比如说1。规则2。将军,3。离题。然后想象一个前端页面,在那里你可以对它们重新排序,当你按下save时,它调用一个数据库过程来更新类别的排序。我正在寻找一种在一个查询中实现这一点的方法。这太模糊了,我甚至不知道从哪里开始。也许你需要看看表值参数?@SeanLange我为这个问题的模糊性道歉。我又写了一遍,希望现在我需要的东西更容易理解。你好。。看你的回复,我不认为这是我需要的,但我确实感谢你的尝试。我已经修改了这个问题,以便更容易理解我到底需要什么帮助。你能再检查一下吗?谢谢你的最新回复。我明天就试试这个。你能详细说明一下“加入”子选项吗?我不确定我是否完全理解Select和From以及From-to之间的任何内容)B。XML与此有什么关系,为什么重要?@DethoRhyne Alias B将通过解析ID的分隔字符串生成一个小表。XML用于解析字符串。