我有一个有200个表的生产数据库。自上周以来,我无法访问其中一个表。当我只选择前100行时,它会继续运行。
如何找出无法访问该表的原因?如何找到桌子上是否有锁?所有其他表都运行良好
答案 0 :(得分:2)
根据我的理解,您在查询时无法获得任何结果。
可能有很多原因。
1)可以锁定。
要执行脏读,请尝试使用NOLOCK
提示进行查询。
SELECT Column1 FROM TableName WITH (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
运算符本身。 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`
答案 1 :(得分:0)
检查表格上的权限。右键单击表并选择属性。单击权限选项卡,确保您可以访问该表。