2012-03-08 2 views
2

기본적으로 테이블이 내 코드에서 잠겨 있는지 확인해야합니다.SQL 서버의 테이블이 잠겨 있는지 확인 LOCK_TIMEOUT 0

DB에서 직접 실행하면 알 수 있습니다. 그렇지 않은 경우 테이블이 잠겨하거나 어느 경우

SELECT * FROM 'tablename' SET LOCK_TIMEOUT 0 

나는 즉시 오류를 얻을 수 있습니다. 그러나 나는이 코드를 내 코드에서 호출 할 때 잠금을 해제하기 전에 일정 시간 기다리는 것으로 보인다. 이 쿼리를 호출하는 데 사용하는 코드는 다음과 같습니다.

SqlConnection conn = new SqlConnection(@"ConnectionString"); 
using(conn) 
{ 
    conn.Open(); 
    var query = new SqlCommand("SELECT * FROM tablename SET LOCK_TIMEOUT 0", conn); 

    try 
    { 
     SqlDataReader reader = query.ExecuteReader(); 
     // No lock 
    }catch (Exception) 
    { 
     // Deal with lock exception 
    } 
} 

나는 곧바로 알고 싶다. 어떤 제안? 아니면 이것을하는 더 좋은 방법이 있을까요?

답변

2

그것은 당신이 달성하기 위해 노력하고, 어떤 목적으로,하지만 당신은 전에 그것을 를 설정해야합니다 반면에 당신이은 SELECT 후 잠금 시간 종료 을 설정하고있는 것을 목표 명확하지 않다. 당신이 트랜잭션 잠금을 의미하는 경우

+0

이것은 트릭을 완료했습니다. 닻 – Boob

1

,이를 확인 :

select 
    object_name(resource_associated_entity_id) as 'TableName' ,* 
from 
    sys.dm_tran_locks 
where resource_type = 'OBJECT' 
    and resource_database_id = DB_ID() 

이 : 테이블이 트랜잭션에 의해이 같은

1

어쩌면 무언가를 고정되지 않은 경우에 행을 반환하지 않습니다

select 
    object_name(resource_associated_entity_id) as 'TableName' ,* 
from 
    sys.dm_tran_locks 
where resource_type = 'OBJECT' 
    and resource_database_id = DB_ID() and 
    object_name(resource_associated_entity_id) = N'YourTableName' 

그 순간에 보인 모든 테이블을 얻을 수 있습니다

관련 문제