Domanda

Sto creando un meccanismo SQL (in MSSQL 2005) che consente a un solo utente alla volta di impostare il campo in una determinata tabella.Se questo campo è impostato, nessun altro può cancellarlo (impostato su NULL).In caso contrario, questo campo è impostato su something unique for the user's session.Come buon candidato, master.dbo.sysprocesses.sid mi cerca, ma non ne sono sicuro.

Devo assicurarmi che quando l'applicazione client dell'utente (che utilizzerà questo meccanismo) si arresta in modo anomalo, il campo verrà cancellato in modo che altri utenti possano utilizzarlo.Sto pensando a un lavoro di cancellazione, che controllerà se la sessione dell'utente che ha impostato questo campo è ancora attiva e, in caso contrario, cancellala (ovviamente solo quando il campo non è NULL).

Esiste una colonna univoca in master.dbo.sysprocesses per ogni sessione utente senza riutilizzare lo stesso valore in seguito?

Grazie mille

È stato utile?

Soluzione

spid identifica qualsiasi connessione / sessione.Ne più ne meno.Nessun'altra sessione avrà quello spid.

E puoi utilizzare @@ SPID invece disysprocesses.

Modifica: sid non è univoco perché un utente può avere diverse sessioni in corso.

Penso che abbiamo bisogno di più informazioni per offrire un suggerimento.

Temo che la tua app si arresti in modo anomalo abbastanza spesso da richiedere questa soluzione per cancellare tale blocco esclusivo ...

Edit2: login_time sarebbe utilizzabile anche in base ai commenti

Altri suggerimenti

Uno spid non è unico.A volte vedo 10 o più spid uguali sul mio server (succede a causa del parallelismo).

Prova spid + kpid.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top