Pergunta

Estou criando um mecanismo SQL (no MSSQL 2005) que permite que apenas um usuário por vez defina o campo em determinada tabela.Se este campo for definido, ninguém mais poderá limpá-lo (defina como NULL).Caso contrário, este campo é definido como something unique for the user's session.Como um bom candidato, o master.dbo.sysprocesses.sid procura por mim, mas não tenho certeza.

Preciso garantir que, quando o aplicativo cliente do usuário (que usará esse mecanismo) travar, o campo será limpo para que outros usuários possam usá-lo.Estou pensando em algum trabalho de limpeza, que verificará se a sessão do usuário que definiu este campo ainda está ativa e, se não, limpe-a (claro, apenas quando o campo não for NULL).

Existe uma coluna exclusiva em master.dbo.sysprocesses para cada sessão do usuário sem reutilizar o mesmo valor posteriormente?

Muito obrigado

Foi útil?

Solução

spid identifica qualquer conexão / sessão.Nem mais nem menos.Nenhuma outra sessão terá esse spid.

E você pode usar @@ SPID para isso em vez desysprocesses.

Editar: sid não é único porque um usuário pode ter várias sessões em andamento.

Acho que precisamos de mais informações para oferecer uma sugestão.

Estou preocupado que seu aplicativo falhe com freqüência suficiente para precisar desta solução para limpar esse bloqueio exclusivo ...

Edit2: login_time também pode ser usado com base nos comentários

Outras dicas

Um spid não é único.Às vezes vejo 10 ou mais spids iguais no meu servidor (isso acontece por causa do paralelismo).

Experimente spid + kpid.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top