小编典典

根据位置SQL Server重新排序行

sql

我在SO上看到了很多与此问题有关的问题,但都与我的情况无关。除了进行基本的CRUD操作外,我与SQL专家们无二。因此,我对此非常执着。

我有一张表。

myTable [rID, newsID, OrderPosition] 在哪里;

rID is primaryKey int column, 
newsID int is the ID of an item from another table and,
OrderPosition int to hold the position of the rows.

myTable始终总有10行。

因此,首先,假设myTable具有以下数据:

rID    newsID    OrderPosition
100    4000      1
101    4100      2
102    4200      3
103    4300      4
104    4400      5
105    4500      6
106    4600      7
107    4700      8
108    4800      9
109    4900      10

预期的功能应如下所示;

插入新

当插入新项目时,用户应该能够将其插入到他/她想要的任何位置。现在,我仅设法通过删除OrderPosition =
10行,将新记录的OrderPosition分配为0并对表重新排序来将新记录插入到第一个位置。但是客户希望选择物料应移至哪个位置。在这种情况下,我假设OrderPosition
= 10将再次被删除?

删除

当从该表中删除一条记录时,由于总会有10条记录,因此我需要从另一个表[tblNews]中获取最新输入的记录,并将其插入到第10个位置(我可以从tblNews中获取最后一条记录)由于我不知道它们将删除哪条记录,因此我不知道在删除记录后如何对表重新排序。

任何帮助,代码,文章的方向将不胜感激。

===========编辑====================

答案中提到的UPDATE方法对我不起作用;因为
例如,用户想要将新记录插入5阶位置。这意味着将删除订单头寸10,并将当前位置为5、6、7、8和9的记录增加1。


阅读 163

收藏
2021-04-28

共1个答案

小编典典

插入行时,您需要“移动”下面的行以为其留出空间。例如,可以像这样在位置4上插入:

DELETE FROM myTable WHERE OrderPosition = 10; -- If you want the keep the table from growing beyond 10 rows.
UPDATE myTable SET OrderPosition = OrderPosition + 1 WHERE OrderPosition >= 4;
INSERT INTO myTable VALUES (..., 4);

相反,删除该行后,可以将其“下方”的行向上备份:

DELETE FROM myTable WHERE OrderPosition = 4;
UPDATE myTable SET OrderPosition = OrderPosition - 1 WHERE OrderPosition > 4;
-- Now you can insert the row on position 10 if desired.

请注意,即使OrderPosition对其具有UNIQUE约束,UPDATE也不会违反它。

[SQL提琴]

2021-04-28