Какой столбец из master.dbo.sysprocesses является уникальным для сеанса?

StackOverflow https://stackoverflow.com/questions/5882029

Вопрос

Я создаю механизм 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top