Это распространенная проблема, но ее легко исправить ..
- Измените вашу пользовательскую таблицу, чтобы идентификатор пользователя представлял собой столбец идентификаторов
- Когда вы вставляете ваши новые данные пользователя в эту таблицу, SQLServer автоматически создает для вас новый уникальный идентификатор пользователя
- Чтобы получить идентификатор пользователя, созданный для вас, используйте функцию SCOPE_IDENTITY ()
Дополнительную информацию о столбцах идентификаторов и о том, как получить новый идентификатор пользователя, можно найти в этом руководстве.
SQLTeam - Понимание столбцов идентификации
Редактировать (на основе комментариев ниже)
Причина, по которой вы в настоящее время получаете дубликаты идентификаторов пользователей, заключается в том, что у вас есть временной интервал между запросом max (userid) и его обновлением / вставкой новой пользовательской записи.
Неважно, будет ли эта задержка (между запросом и обновлением) 10 минут или 10 миллисекунд, если ваш сайт достаточно сильно пострадает, проблема все равно будет возникать.
Используя столбцы идентификаторов, SQLServer эффективно устраняет задержку, создавая для вас идентификатор. Никакой другой процесс / пользователь не может получить такой же ID пользователя.
Попробуйте ввести следующий код ...
/*Create Table*/
CREATE TABLE TestTableSO (UserID INT IDENTITY(1,1), Username NVARCHAR(50))
/*Insert some data, note that I'm not providing a UserID on my Insert*/
INSERT INTO TestTableSO (Username) VALUES ('Joe')
INSERT INTO TestTableSO (Username) VALUES ('Dan')
INSERT INTO TestTableSO (Username) VALUES ('Fred')
INSERT INTO TestTableSO (Username) VALUES ('Sam')
/*Look at the data I've inserted*/
SELECT * FROM TestTableSO
/*Insert one more record*/
INSERT INTO TestTableSO (Username) VALUES ('Roger')
/*Look at the new UserID I have been given by SQL Server*/
SELECT SCOPE_IDENTITY() as NewUserID
/*Drop our table, only needed for testing*/
DROP TABLE TestTableSO
Из этого кода вы получите следующий вывод ...
UserID Username
------------------
1 Joe
2 Dan
3 Fred
4 Sam
NewUserID
-----------
5
Надеюсь, это имеет смысл! Опять повторить. Вы не решите эту проблему, используя Max (UserID)
таким, какой вы есть.
Редактировать # 2
Создание идентификаторов пользователя без сохранения какой-либо информации для использования с идентификатором пользователя является идеей BAD . Вы рискуете исчерпать доступные идентификаторы намного раньше, потому что пользователи, которые будут заходить на ваш сайт, получают идентификатор пользователя, но не вводят никаких подробностей. Предоставляйте им ИД пользователя только в том случае, если они истинный пользователь.