Pregunta

Estoy creando un mecanismo SQL (en MSSQL 2005) que permite que solo un usuario a la vez establezca el campo en cierta tabla.Si este campo está configurado, nadie más puede borrarlo (establecido en NULL).De lo contrario, este campo se establece en something unique for the user's session.Como un buen candidato me busca master.dbo.sysprocesses.sid, pero no estoy seguro de ello.

Necesito asegurarme de que cuando la aplicación cliente del usuario (que utilizará este mecanismo) falle, el campo se borrará para que otros usuarios puedan utilizarlo.Estoy pensando en un trabajo de limpieza, que verificará si la sesión del usuario que configuró este campo aún está activa y, de lo contrario, la borrará (por supuesto, solo cuando el campo no sea NULL).

¿Existe una columna única en master.dbo.sysprocesses para cada sesión de usuario sin reutilizar el mismo valor más adelante?

Muchas gracias

¿Fue útil?

Solución

spid identifica cualquier conexión / sesión.Ni mas ni menos.Ninguna otra sesión tendrá ese spid.

Y puede usar @@ SPID para eso en lugar desysprocesses.

Editar: sid no es único porque un usuario puede tener varias sesiones en curso.

Creo que necesitamos más información para ofrecer una sugerencia.

Me preocupa que su aplicación se bloquee con la frecuencia suficiente como para necesitar esta solución para eliminar ese bloqueo exclusivo ...

Edit2: login_time también se podría utilizar según los comentarios

Otros consejos

Un spid no es único.A veces veo 10 o más spids iguales en mi servidor (sucede debido al paralelismo).

Pruebe spid + kpid.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top