T-SQL переупорядочивание строк - PullRequest
1 голос
/ 18 января 2012

У меня есть таблица со столбцом под названием «Приоритет». Никакие две записи не должны иметь одинаковое значение приоритета.

Если я добавлю новую запись с тем же значением приоритета, что и у существующей записи, она должна увеличить

Приоритет других записей, которые следуют, ЕСЛИ приращение предыдущей строки вызывает дублирующийся приоритет.

Например:

Мы хотим вставить запись с приоритетом 2.

(ДО) приоритет 1 2 3 5

(ПОСЛЕ) приоритет 1 2 3 4 5

Другой пример:

Вставить запись с приоритетом 2

(ДО) приоритет 1 2 3 5 7

(ПОСЛЕ) приоритет 1 2 3 4 5 7 * * тысяча двадцать-один

Я делаю это с помощью следующего кода, и он работает до тех пор, пока в последовательности нет пробелов:

UPDATE MyTable SET Priority = Priority + 1 
WHERE LocationId = @LocationId AND Priority >= @priorityToInsert 

Проблема в том, что этот оператор обновления увеличивает ВСЕ значения приоритета. Пример № 2 выше не удается

потому что запись с приоритетом 7 увеличивается до 8, а это не так.

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 18 января 2012

Вы могли бы использовать что-то вроде этого:

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не продвигался бы.

Поскольку это рекурсивно, как это, вам, вероятно, придется использовать рекурсивную или итеративную технику.

Я бы подумал о другом дизайне или, возможно, о чем-то с триггерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...