最简单的SQL查询永远不会返回

最简单的SQL查询永远不会返回,sql,sql-server-2008-express,Sql,Sql Server 2008 Express,我有一个SQL查询,它非常简单,就是从tblOrders中选择*,其中customerID=5000,但它永远不会返回。我等了10分钟就放弃了 最奇怪的是,在同一个DB上但在另一个表上的其他查询可以正常工作。删除where子句也无济于事,因此表似乎不知何故没有响应。大约有30000行,所以它也不是最大的桌子 我正在对远程服务器上运行的SQL Server 2008 Express使用MS SQL SMS 2008 Express。听起来您的表被锁定了 运行此查询以查看针对它的锁 USE mast

我有一个SQL查询,它非常简单,就是从tblOrders中选择*,其中customerID=5000,但它永远不会返回。我等了10分钟就放弃了

最奇怪的是,在同一个DB上但在另一个表上的其他查询可以正常工作。删除where子句也无济于事,因此表似乎不知何故没有响应。大约有30000行,所以它也不是最大的桌子


我正在对远程服务器上运行的SQL Server 2008 Express使用MS SQL SMS 2008 Express。

听起来您的表被锁定了

运行此查询以查看针对它的锁

USE master;
GO
EXEC sp_lock;
GO
但是,表锁定是它自己的整个思维领域 以下是sp_锁定系统存储过程中的一些信息

当你找到锁的时候,你可以把它杀死

KILL { session ID | UOW } [ WITH STATUSONLY ] 

尝试此操作以绕过表上的所有锁-

select * from tblOrders(nolock) where customerID = 5000

我同意其他人的观点,这很可能是一个锁定问题。默认情况下,对表的写访问仍然会阻止读(只读)访问

自SQLServer2005以来,这可以通过使用“行版本控制”来修复。您需要更改数据库的设置以启用此功能

有关更详细的说明,请参阅手册:


customerID设置为主键还是索引?如果没有,那么它可能会遍历数据库中的每一条记录,不管它是否找到它。您是否有任何打开的事务可能会锁定表?该表是否在customerID上建立索引?你确定它实际上是一张桌子,而不是一个视图吗?另外,如果“从tblOrders中选择customerID,其中customerID=5000”,会发生什么情况。最后,customerID是数字的吗?我重新启动了服务器,它的响应稍微好一点。现在只要我限制线路,它就会及时响应。我发现它根本没有索引,所以我在OrderID和CustomerID上添加了索引。所有ID字段都是数字。尽管如此,在这个表上选择“按医嘱ID排序的前5000个订单”需要19秒,而在另一个表上(按tableprimaryid排序的前5000个订单)进行完整的“按医嘱ID排序的表tblorders”选择需要2分钟,但至少完成了:)