无法访问 SQL Server 数据库中的表之一

Sql*_*ner 2 sql sql-server sql-server-2008

我有一个包含 200 个表的生产数据库。自上周以来,我无法访问其中一张桌子。当我只选择前 100 行时,它会继续运行。

如何找出该表无法访问的原因?如何判断表是否有锁?所有其他表都运行良好

Sou*_*avA 6

据我了解,查询时无法得到任何结果。

这可能有很多原因。

1)它可以被锁定。要进行脏读,请尝试使用NOLOCK提示进行查询。

SELECT Column1 FROM TableName WITH (NOLOCK)
Run Code Online (Sandbox Code Playgroud)

要检查表上是否有锁,请使用以下脚本:

declare @a table (
spid int,
[dbid] int,
objid int,
indid int,
[type] varchar(10),
resource varchar(100),
mode varchar(2),
[status] varchar(20)
);

insert into @a
exec sp_lock

select object_name(objid) tablename, * from @a where object_name(objid) = 'TableName'
Run Code Online (Sandbox Code Playgroud)

2)当统计数据过时时,查询可能会很慢。尝试更新它们。

UPDATE STATISTICS dbo.TableName;
Run Code Online (Sandbox Code Playgroud)

3)运营TOP本身。top 运算符基本上获取整个数据集并对其进行排序,并给出前 100 个。您可以添加查询提示以在排序之前获取一些数据。

SELECT TOP 10 Column1 FROM TableName (OPTION FAST(1))
--Have avoided doing a `SELECT * FROM....`

SELECT 1 FROM TableName (OPTION FAST(1))
--Without `TOP`
Run Code Online (Sandbox Code Playgroud)