1

我运行了一个非常简单的更改表查询

更改表 mytable 更改列短名称 nvarchar(35)

尝试将该列的大小从 20 个字符增加到 35 个字符。几分钟后该查询仍未完成,我取消了它。现在我什至无法对该表进行选择。通常 select * 需要不到一秒钟的时间来返回结果。现在几分钟后它仍在运行,没有结果。

ALTER COLUMN 的执行时间

我查看了该线程,但其中没有任何内容为我提供任何帮助。

该表本身有大约 3000 条记录,主要是文本,大多数记录最多相当于大约一个段落的文本。正如我所说,执行 select * 通常会在一秒钟内返回所有记录。

这是 SQL Server 2012

该列是我最近添加到表中的列。此表上有多个 FK 关系,但没有一个处理此列。

4

1 回答 1

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价值是什么......

于 2013-10-04T21:33:26.443 回答