node.js - 如何编写对元素重新排序的查询

标签 node.js sql-server stored-procedures

我正在编写一个代码,该代码将包含按特定顺序排列的项目列表,并且我想随意重新排序它们。设置其实并不那么重要,但总而言之,它是一个带有 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/

相关文章:

node.js - 授权 Stormpath 应用程序的正确方法是什么?

sql-server - 我们如何保护我们的数据免受 DBA 的侵害?

c# - 如何检索 SQL Server LocalDb 名称列表?

java - 使用 Spring Data JPA 正确调用存储过程

mysql - 在存储过程中处理多个嵌套游标

python - 从 Python 调用时 SQL 存储过程未完成

node.js - 部署到 AWS Elastic Beanstalk 失败,出现异常 "invalid byte sequence in UTF-8"

node.js - 使用 mocha 测试 Node tcp 服务器

node.js - 如何在 dynamoDB 中返回插入的项目

SQL SUM 相同的列