2008-09-21 2 views
7

트랜잭션을 시작하지 않고 SQL 2005-2008 데이터베이스에서 행을 잠그는 방법이 있습니까? 잠금 해제 될 때까지 다른 프로세스가 행을 업데이트 할 수 없습니까?SQL 2005-2008에서 행 잠그기

답변

3

당신은 RowLock or other hints를 사용할 수 있지만 HOLDLOCK 힌트는 트랜잭션을 커밋 될 때까지 잠금을 보유하는 SQL 서버를 지시합니다

... careful해야한다. ROWLOCK 힌트는이 레코드 만 잠그고 페이지 또는 테이블 잠금을 발행하지 않습니다.

연결을 닫거나 시간이 초과되면 잠금 장치가 해제됩니다. 트랙에서이 행이 죽은 SELECT 문을 중지 할 것이므로이 작업을 수행하는 것은 매우 신중할 것입니다. SQL Server에는 사용할 수있는 여러 가지 잠금 힌트가 있습니다. HOLDLOCK 또는 ROWLOCK을 검색 할 때 온라인 설명서에서 해당 항목을 볼 수 있습니다.

+0

저는 이것을 시도했지만 원하는 것이 아닙니다. 실제로 업데이트를 수행하면 잠금 기능이 유지됩니다. 업데이트는 잠금이 해제 될 때까지 기다린 후 레코드를 업데이트합니다 (이것은 원하는 내용이 아닙니다). 둘째, 문제없이 선택을 수행 할 수 있습니다. – Martijn

1

서버에서 실행하는 모든 것은 암시 적 또는 명시 적 트랜잭션에서 발생합니다.

단순히 트랜잭션이없는 행을 잠글 수 없습니다 (행을 읽기 전용으로 설정). 데이터베이스를 읽기 전용으로 설정할 수 있지만 한 행만 읽을 수는 없습니다.

목적을 설명하면 더 나은 해결책 일 수 있습니다. 격리 수준 및 잠금 힌트 및 row versioning.

0

을 잠 가야합니까, 아니면 Sql Server's Application locks이 필요합니까?

응용 프로그램 잠금은 "잠금", "잠금 해제"및 잠겨 있는지 확인하는 이름의 잠금 장치입니다. 자세한 내용은 위의 링크를 참조하십시오. (연결이 끊어지면 잠금이 해제됩니다. 따라서 자신을 청소하는 경향이 있습니다.)

+0

'잠긴'행에 액세스하는 다른 응용 프로그램이 응용 프로그램 잠금을 먼저 확인해야한다는 것을 모르기 때문에 응용 프로그램 잠금을 사용할 수 없습니다. – alex