master.dbo.sysprocessesのどの列がセッションに固有ですか?
-
28-10-2019 - |
質問
特定のテーブルのフィールドを一度に1人のユーザーのみが設定できるSQLメカニズム(MSSQL 2005)を作成しています。このフィールドが設定されている場合、他の誰もそれをクリアできません(NULLに設定)。そうでない場合、このフィールドはsomething unique for the user's session
に設定されます。良い候補として、master.dbo.sysprocesses.sid
は私を探しますが、それについてはよくわかりません。
ユーザーのクライアントアプリケーション(このメカニズムを使用する)がクラッシュしたときに、フィールドがクリアされ、別のユーザーが使用できるようにする必要があります。このフィールドを設定したユーザーのセッションがまだアクティブであるかどうかを確認し、アクティブでない場合はクリアする(もちろん、フィールドがNULLでない場合のみ)クリアジョブについて考えています。
後で同じ値を再利用せずに、ユーザーセッションごとにmaster.dbo.sysprocessesに一意の列がありますか?
どうもありがとう
解決
spidは、接続/セッションを識別します。それ以上でもそれ以下でもありません。他のセッションではそのスパイはありません。
代わりに、 @@ SPID を使用できます。sysprocesses。
編集:ユーザーは複数のセッションを進行できるため、sidは一意ではありません。
提案を提供するには、さらに情報が必要だと思います。
このような排他的ロックをクリアするには、このソリューションが必要になるほど頻繁にアプリがクラッシュするのではないかと心配しています...
Edit2:コメントに基づいてlogin_timeも使用できます
他のヒント
spidは一意ではありません。サーバー上に10個以上の等しいspidが表示されることがあります(並列処理が原因で発生します)。
spid + kpidを試してください。