T-SQL переназначение нумерации заказов - PullRequest
0 голосов
/ 28 мая 2010

Скажем, у меня есть таблица с полем с именем "ordernum", которое обозначает порядок данного набора строк. Теперь представьте, что я удаляю одну из этих строк. Какой тип запроса лучше всего подойдет для повторного назначения номеров заказов, чтобы они оставались последовательными?

Вот пример:

id group_id имя OrderNum Active
----------------------------------------------- ----
0 ______________ 0 __________ _______________ 'name1' 5 __________ правда
1 _______________ 0 _______________ 'Имя2' __________ 4 __________ правда
2 _______________ 0 _______________ 'name3' __________ 3 __________ правда
3 _______________ 1 _______________ 'Name4' __________ 2 __________ правда
4 _______________ 1 _______________ 'Name5' _________ 1 __________ правда
5 _______________ 1 _______________ 'Name6' _________ NULL __________ ложь

Теперь, если бы я удалил столбец с id = '4', как бы я сбросил значения в поле 'ordernum' для этой конкретной группы? Это вообще возможно?
Или если я добавлю новую строку. (При первом создании строк они сортируются по дате, но затем у пользователя есть возможность установить порядок самостоятельно.)

В моем дизайне таблицы у меня есть столбец "активный" логический. Если для 'active' установлено значение false, для 'ordernum' установлено значение NULL . В противном случае ему должен быть присвоен номер заказа.

1 Ответ

0 голосов
/ 28 мая 2010

Вы можете использовать триггер для удаления:

update tbl
set ordernum = ordernum - 1
from deleted d
where d.active = 1
and group_id = d.group_id
and ordernum > d.ordernum

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

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