Tsql t-sql重新排序行
我有一个表,其中有一列名为“Priority”。没有两个记录具有相同的优先级值 如果我添加一个与现有记录具有相同优先级值的新条目,它应该增加 如果前一行的增量导致重复优先级,则后面的其他记录的优先级 例如: 我们要插入优先级为2的记录 (之前) 优先 1. 2. 3. 五, (之后) 优先 1. 2. 3. 4. 五, 另一个例子: 插入优先级为2的记录 (之前) 优先 1. 2. 3. 5. 七, (之后) 优先 1. 2. 3. 4. 5. 七, 我使用以下代码执行此操作,只要序列中没有间隙,它就可以工作:Tsql t-sql重新排序行,tsql,Tsql,我有一个表,其中有一列名为“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不会提前
因为它是这样递归的,所以可能需要使用递归或迭代技术
我会考虑一种不同的设计,或者使用触发器。如果您继续使用此方法,请关注性能。。。每次插入新记录时,您都可能会更新此表中的每条记录。如果您添加了一个指示正在使用的数据库的标记,这将非常有用。答案可能因数据库和版本而异。