Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как вычислять следующий порядковый номер  [new]
hey
Guest
Есть некий бизнес-обьект имеющий уникальный номер вида ccyymmddnnnn (год/месяц/день/порядковый номер обьекта в данный день) т.е. например 200908050001 или 200908050002. Последняя цифра нарастает за день по мере создания обьектов.
Т.к. она должна сбрасываться на следующий день, то identity негодится. Как можно ее вычислять что-бы избежать конфликтов ?
5 авг 09, 04:13    [7498221]     Ответить | Цитировать Сообщить модератору
 Re: Как вычислять следующий порядковый номер  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Convert(VarChar,[Date],112) + Convert(VarChar,Row_Number()OVER(PARTITION BY [Date] ORDER BY ID))
Думаю не пойдёт. Во первых при удалении объектов номера сместятся, во вторых поик по этому ключу не прокатит.

Тогдась нумерация через блокирование (самой или отдельной таблы) или внешний мэханызм (пример с потолка - очереди брокера).

А есчё, зачем вам это?
5 авг 09, 05:02    [7498238]     Ответить | Цитировать Сообщить модератору
 Re: Как вычислять следующий порядковый номер  [new]
aleks2
Guest
hey,

1. Делаем всеж в таблице поле ID IDENTITY
2. Вычисляем номер ID-ISNULL((select MIN(ID) FROM aTable WHERE date=now), ID-1).
3. Ну вычислять в триггере придется.
5 авг 09, 06:28    [7498261]     Ответить | Цитировать Сообщить модератору
 Re: Как вычислять следующий порядковый номер  [new]
Козьма Прутков
Member

Откуда: Москва
Сообщений: 186
интересно, а дырки в нумерации допустимы? Если нет - до identity не надо использовать, и придется генерировать номер через табличку. А вычислять, как уже заметили, в триггере или делать хранимку, через которую сохранять новый экземпляр этого самого бизнес-объекта.

------------
Чем сложнее решение задачи, тем больше вероятность, что оно неправильное
5 авг 09, 09:11    [7498436]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить