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

无法访问SQL Server数据库中的一个表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个有200个表的生产数据库。从上周起,我无法访问其中一个表。当我只选择前100行时,它会继续运行 我如何才能找到无法访问该表的原因?我怎样才能找到桌子上有没有锁?所有其他表都正常运行检查表上的权限。在表上单击鼠标右键,然后选择“属性”。单击“权限”选项卡,确保您有权访问该表。据我所知,您在查询时无法获得任何结果 这可能有很多原因 1它可能被锁上了。 要执行脏读,请尝试使用NOLOCK提示进行查询 要检查表上是否有锁,请使用以下脚本: declare @a table ( spid int,

我有一个有200个表的生产数据库。从上周起,我无法访问其中一个表。当我只选择前100行时,它会继续运行


我如何才能找到无法访问该表的原因?我怎样才能找到桌子上有没有锁?所有其他表都正常运行

检查表上的权限。在表上单击鼠标右键,然后选择“属性”。单击“权限”选项卡,确保您有权访问该表。

据我所知,您在查询时无法获得任何结果

这可能有很多原因

1它可能被锁上了。 要执行脏读,请尝试使用NOLOCK提示进行查询

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

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'
2当统计数据过时时,查询可能会很慢。尝试更新它们

UPDATE STATISTICS dbo.TableName;
3顶部操作员本身。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`

请提供有关给出问题的表的一些详细信息。它的结构、大小是什么?你有索引吗?您试图对其执行的查询是什么,您的数据是什么样子的?任何打开的事务?当查询失败时,不要假设表有问题。您的查询耗时太长,即使使用TOP 100子句,也无法得到任何答案。什么是查询,表中有多少行,是否有适当的索引?桌子锁上了吗?如果你做一个简单的选择,你会得到什么结果吗?带有with NOLOCK table提示的SELECT?如果NOLOCK有效,则意味着所有记录都被另一个尚未提交的事务锁定。我选择了前100行没有锁定,仍然有相同的问题。我在开发环境中有相同的表,运行良好。该表有大约500K条记录。我对数据库有管理员访问权限。当我试图访问表属性时,它的错误“无法显示请求的对话框,锁请求超时时间已超过Derror:1222'如果可能,请重新启动该框上的SQL服务。如果表上有锁,我们如何进一步调查?
SELECT TOP 10 Column1 FROM TableName (OPTION FAST(1))
--Have avoided doing a `SELECT * FROM....`

SELECT 1 FROM TableName (OPTION FAST(1))
--Without `TOP`