我有一个像这样的简单查询
SELECT * FROM MY_TABLE;
当我运行它时,SQL Server Management Studio挂起。
其他表和视图工作正常。
这会导致什么?我以前在运行UPDATE语句时有锁,我知道如何处理这些。但是什么可能导致SELECT锁定?
我已经运行了“所有阻止交易”报告,并且说没有。
答案 0 :(得分:10)
可能不是锁定的选择,而是正在编辑(udpate / delete / insert)导致锁定的表的其他进程。
您可以通过在SQL Server上运行exec sp_who2
来查看阻止的进程。
或者,如果您对脏读操作没问题,则可以执行以下两项操作之一
SELECT * FROM Table WITH (NOLOCK)
OR
SET Transaction Isolation Level Read Uncommitted
SELECT * FROM Table
答案 1 :(得分:3)
使用此:
SELECT * FROM MY_TABLE with (NOLOCK)
答案 2 :(得分:3)
如果还有很多其他活动正在进行,其他可能会导致锁定,而您的SELECT可能是死锁的受害者。如果你运行以下
SELECT * FROM my_table WITH(nolock)
您告诉数据库您可以读取脏(未注释)数据,并且可以安全地忽略由其他活动引起的锁定。
此外,如果这样的查询导致管理工作室挂起,那么您的表可能会使用某些优化
答案 3 :(得分:1)
两种可能性:
答案 4 :(得分:1)
MY_TABLE
也可能被一些未提交的事务锁定 - 即在另一个MSMM窗口中运行(或运行时失败)的脚本/存储过程。