Tsql t-sql重新排序行

Tsql t-sql重新排序行,tsql,Tsql,我有一个表,其中有一列名为“Priority”。没有两个记录具有相同的优先级值 如果我添加一个与现有记录具有相同优先级值的新条目,它应该增加 如果前一行的增量导致重复优先级,则后面的其他记录的优先级 例如: 我们要插入优先级为2的记录 (之前) 优先 1. 2. 3. 五, (之后) 优先 1. 2. 3. 4. 五, 另一个例子: 插入优先级为2的记录 (之前) 优先 1. 2. 3. 5. 七, (之后) 优先 1. 2. 3. 4. 5. 七, 我使用以下代码执行此操作,只要序列中没有间隙

我有一个表,其中有一列名为“Priority”。没有两个记录具有相同的优先级值

如果我添加一个与现有记录具有相同优先级值的新条目,它应该增加

如果前一行的增量导致重复优先级,则后面的其他记录的优先级

例如:

我们要插入优先级为2的记录

(之前) 优先 1. 2. 3. 五,

(之后) 优先 1. 2. 3. 4. 五,

另一个例子:

插入优先级为2的记录

(之前) 优先 1. 2. 3. 5. 七,

(之后) 优先 1. 2. 3. 4. 5. 七,

我使用以下代码执行此操作,只要序列中没有间隙,它就可以工作:

UPDATE MyTable SET Priority = Priority + 1 
WHERE LocationId = @LocationId AND Priority >= @priorityToInsert 
问题是此update语句会增加所有优先级值。上面的例子2失败了

因为优先级为7的记录会在不应该的时候增加到8


请帮忙

您可以使用以下内容:

UPDATE MyTable t1
SET t1.Priority = t1.Priority + 1 
WHERE t1.LocationId = @LocationId 
AND t1.Priority >= @priorityToInsert 
AND NOT EXISTS (
    SELECT *
    FROM MyTable t2
    WHERE t2.LocationId = @LocationId
        AND t2.Priority = t1.Priority - 1
)
问题是,如果你的例子中也有8,它会将8提前到9,因为它看到7,即使7不会提前

因为它是这样递归的,所以可能需要使用递归或迭代技术


我会考虑一种不同的设计,或者使用触发器。

如果您继续使用此方法,请关注性能。。。每次插入新记录时,您都可能会更新此表中的每条记录。如果您添加了一个指示正在使用的数据库的标记,这将非常有用。答案可能因数据库和版本而异。