Frage

Ich erstelle einen SQL-Mechanismus (in MSSQL 2005), mit dem jeweils nur ein Benutzer das Feld in einer bestimmten Tabelle festlegen kann.Wenn dieses Feld gesetzt ist, kann es niemand anderes löschen (auf NULL setzen).Wenn nicht, wird dieses Feld auf something unique for the user's session gesetzt.Als guter Kandidat sucht mich master.dbo.sysprocesses.sid, aber ich bin mir nicht sicher.

Ich muss sicherstellen, dass beim Absturz der Clientanwendung des Benutzers (die diesen Mechanismus verwendet) das Feld gelöscht wird, damit andere Benutzer es verwenden können.Ich denke an einen Löschjob, der prüft, ob die Sitzung des Benutzers, in der dieses Feld festgelegt wurde, noch aktiv ist, und wenn nicht, löschen Sie ihn (natürlich nur, wenn das Feld nicht NULL ist).

Gibt es in master.dbo.sysprocesses für jede Benutzersitzung eine eindeutige Spalte, ohne dass später derselbe Wert wiederverwendet wird?

Vielen Dank

War es hilfreich?

Lösung

spid identifiziert jede Verbindung / Sitzung.Nicht mehr und nicht weniger.Keine andere Sitzung wird diese Spid haben.

Und Sie können stattdessen @@ SPID verwenden, anstattSystemprozesse.

Bearbeiten: sid ist nicht eindeutig, da ein Benutzer mehrere Sitzungen ausführen kann.

Ich denke, wir brauchen mehr Informationen, um einen Vorschlag zu machen.

Ich befürchte, dass Ihre App häufig genug abstürzt, um diese Lösung zum Aufheben dieser exklusiven Sperrung zu benötigen ...

Edit2: login_time kann auch basierend auf Kommentaren verwendet werden

Andere Tipps

Ein Spid ist nicht eindeutig.Manchmal sehe ich 10 oder mehr gleiche Spids auf meinem Server (dies geschieht aufgrund von Parallelität).

Versuchen Sie es mit spid + kpid.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top