1

나는 (MSSQL 2005에서) 특정 테이블에서 필드를 설정할 때 한 명의 사용자 만 허용하는 SQL 메커니즘을 만들고 있습니다. 이 필드가 설정된 경우 다른 사람이 필드를 지울 수 없습니다 (NULL로 설정). 그렇지 않은 경우이 필드는 something unique for the user's session으로 설정됩니다. 좋은 후보자 인 master.dbo.sysprocesses.sid이 나를 찾지만 그걸로 확신하지 못합니다.master.dbo.sysprocesses의 어떤 열이 세션에 고유합니까?

사용자의 클라이언트 응용 프로그램 (이 메커니즘을 사용하는)이 충돌 할 때이를 확인해야 필드가 지워지고 다른 사용자가 사용할 수 있습니다. 나는이 필드를 설정 한 사용자의 세션이 아직 활성 상태인지 아닌지를 확인하는 일부 지우기 작업에 대해 생각하고 있습니다. 그렇다면 필드가 NULL이 아닌 경우에만 지워야합니다.

나중에 동일한 값을 다시 사용하지 않고 각 사용자 세션에 대해 master.dbo.sysprocesses에 고유 한 열이 있습니까?

덕분에 많은

답변

1

SPID는 연결/세션을 식별합니다. 그 이상도 이하도 아닌. 다른 세션에는 그 spid가 없습니다.

그리고 sysprocess가 아닌 @@SPID을 사용할 수 있습니다.

편집 : 사용자가 여러 세션을 진행할 수 있으므로 sid는 고유하지 않습니다.

나는 제안을하기 위해 더 많은 정보가 필요하다고 생각합니다.

나는 당신의 앱이 배타적 잠금을 취소 한이 솔루션이 필요한만큼 자주 충돌 것이라고 걱정 ...

Edit2가 : login_time는 SPID가 고유하지 않습니다 의견

+0

답변 주셔서 감사합니다.하지만 제 목적으로 사용할 수 없습니다. 일부 세션 (이미 종료 된)이있는 SPID는 나중에 다른 세션을 다시 얻을 수 있으므로 내 정리 작업은 이전 세션인지 또는 세션인지를 인식 할 수 없습니다. –

+0

문제는 내 응용 프로그램이 아니라는 것입니다. 확장 플러그인을 작성하고 있습니다. 그리고 충돌로 인해 연결 문제가 발생할 때 호스트 된 응용 프로그램이 닫히는 것을 의미합니다 (일부 경우 호스트에서 wi-fi를 사용하기 때문에이 문제가 발생합니다). 그리고 독점적 인 레코드 수정을 위해 이러한 잠금을 보장해야합니다. DB 작업을 위해서는 재사용하지 않고 각 세션에 대해 고유 한 가치가 필요합니다. –

+0

알았어.'login_time'을 사용할 수 있는데,이 테이블에서 유일하고 반복 할 수없는 세션 식별자 인 것 같습니다. 당신이 대답을 수정한다면 나는 그것을 받아 들일 것이고, 나는 내 자신의 대답을 받아들이지 않을 것이다. –

0

기반으로도 사용할 수있다. 때로는 내 서버에서 10 개 이상의 동일한 spids가 표시됩니다 (병렬 처리로 인해 발생합니다).

spid + kpid를 시도하십시오.