Какой столбец из master.dbo.sysprocesses является уникальным для сеанса?
-
28-10-2019 - |
Вопрос
Я создаю механизм SQL (в MSSQL 2005), который позволяет только одному пользователю одновременно устанавливать поле в определенной таблице.Если это поле установлено, никто другой не может его очистить (установлено в NULL).В противном случае в этом поле устанавливается значение something unique for the user's session
.Как хороший кандидат для генерации кодовых меток меня ищет, но я не уверен в этом.
Мне нужно убедиться, что в случае сбоя клиентского приложения пользователя (которое будет использовать этот механизм) поле будет очищено, чтобы другие пользователи могли его использовать.Я думаю о некотором задании по очистке, которое будет проверять, активен ли сеанс пользователя, который установил это поле, а если нет, то очистить его (конечно, только когда поле не равно NULL).
Есть ли в master.dbo.sysprocesses уникальный столбец для каждого сеанса пользователя без повторного использования того же значения в дальнейшем?
Большое спасибо
Решение
spid идентифицирует любое соединение / сеанс.Не больше, не меньше.Никакой другой сеанс не будет иметь этого spid.
И вы можете использовать для этого @@ SPID вместоsysprocesses.
Изменить: sid не уникален, потому что у пользователя может быть несколько текущих сеансов.
Думаю, нам нужна дополнительная информация, чтобы предложить предложение.
Я обеспокоен тем, что ваше приложение будет давать сбой достаточно часто, чтобы потребовалось это решение для снятия такой исключительной блокировки ...
Edit2: login_time тоже можно будет использовать на основе комментариев
Другие советы
Spid не уникален.Иногда я вижу на своем сервере 10 или более одинаковых spid (это происходит из-за параллелизма).
Попробуйте spid + kpid.