繁体   English   中英

检查SQL Server中的表是否被SET LOCK_TIMEOUT 0锁定

[英]Checking if a table in sql server is locked with SET LOCK_TIMEOUT 0

基本上,我需要检查表是否已从我的代码中锁定。

我知道是否可以直接在数据库上运行它;

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
    }
} 

我想马上知道。 有什么建议么? 或有更好的方法吗?

目前尚不清楚您要达到的目标和目的,但是要在SELECT 之后设置锁定超时,而您需要在SELECT 之前设置锁定超时。

如果您是指事务锁定,请检查以下内容:

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'

如果表未被任何事务锁定,则不会返回任何行

也许是这样的:

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

这将为您提供所有当前查看的表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM