我运行了一个非常简单的alter table查询
更改表mytable alter column shortname nvarchar(35)
尝试将该列的大小从20个字符增加到35个字符。在几分钟的查询仍未完成之后,我取消了它。现在我甚至无法对该表进行选择。通常选择*需要少于一秒才能返回结果。现在几分钟后它仍在运行,没有结果。
Execution time of ALTER COLUMN
我看了那个帖子,但那里没有任何帮助给我。
该表本身有大约3000条记录,大多数是文本,大多数记录最多只占一段文本。正如我所说,做一个select *通常会在一秒钟内返回所有记录。
这是SQL Server 2012
该列是我最近添加到表中的列。此表上有多个FK关系,但它们都不涉及此列。
答案 0 :(得分:5)
您的SELECT
被屏蔽了。一些潜在的事情:
代码仍然可以回滚。当您点击取消时,如果Management Studio尚未向您显示“用户取消查询”或其他内容,则您需要继续等待。
代码可能已在事务中运行,其他查询被阻止。在您运行此更改的窗口中(并单击取消),检查SELECT @@TRANCOUNT;
- 如果是> 0,多次运行ROLLBACK TRANSACTION;
。
在任何一种情况下,您都应该能够检查阻止SELECT
的人或者是谁。请注意运行查询的会话ID(这是59
或71
之类的数字,它位于查询窗口的选项卡和/或状态栏的括号中。打开一个新的查询窗口(当该窗口继续运行时)并运行以下命令:
SELECT blocking_session_id, wait_type, last_wait_type
FROM sys.dm_exec_requests WHERE session_id = <value>;
-- replace <value> with the session id from the original query
现在,如果blocking_session_id
是一个正整数,您可以看到那个人正在做什么阻碍了你,例如
SELECT * FROM sys.dm_exec_requests WHERE session_id = <blocker>;
DBCC INPUTBUFFER(<blocker>);
-- replace <blocker> with the blocking_session_id
否则,请告诉我们wait_type
值是什么......