2015-02-08 2 views
0

У меня есть приложение SQL Server 2008 R2, которому необходимо создать уникальный серийный номер, который перезагружается каждый день в 1. Таким образом, таблица имеет составной первичный ключ с использованием юлианской даты и серийного номера. У меня будет хранимая процедура, чтобы найти следующий серийный номер - как я могу гарантировать, что два пользователя не получат одинаковый номер?Создайте уникальный серийный номер каждый день

Это работает?

INSERT INTO tbl_test (sn1, sn2) 
VALUES (1, (SELECT isnull(max(sn2) + 1,1) 
      FROM tbl_test 
      WHERE sn1 = 1)) 

И что является лучшим способом проверить код, чтобы убедиться, что он будет работать правильно?

ответ

2

Зачем вам нужен идентификатор, который перезапускается в каждый день? Вы можете вычислить его на лету, когда вам это нужно:

select t.*, 
     row_number() over (partition by cast(CreatedAt as date) order by id) as DayId 
from table t; 

Если вы хотите, чтобы иметь гарантии, я хотел бы предложить вам использовать последовательность. Но, увы, вы используете SQL Server 2008, так что у вас нет доступа к этому. В противном случае используйте триггер.

Я не думаю, что ваш метод будет работать для двух пользователей, которые делают запрос «точно» в одно и то же время.

+1

Серийный номер должен перезагружаться каждый день, потому что куча людей, которые зарабатывают намного больше, чем я, так говорят. Отбросьте это решение, это не вариант. Не могли бы вы объяснить, как триггер разрешит проблему? Благодарю. – JPoole

Смежные вопросы