SQL转换列超时

时间:2010-07-19 13:07:37

标签: sql sql-server tsql

我需要一个查询,它会将单个列从nvarchar(max)更改为32.真正的问题是此表有800,000行。而我的alter table myTable alter column mycolumn语句超时了。有什么建议或提示吗?

5 个答案:

答案 0 :(得分:3)

也许添加新列,然后选择新列中的数据,然后删除旧列并使用原始名称重命名新列将有所帮助。

另一种更简单的方法是根据需要创建一个包含规范的新表,然后选择.. into ..完成后,可以删除旧表。

答案 1 :(得分:2)

如果在SSMS中运行SQL脚本,则没有设置超时。你只能使用c#etc获得超时,这是默认的30秒CommandTimeout。

我建议将超时更改为3600,或者在SSMS中运行。

要考虑的另一件事:将记录此更改,以便它可以回滚。确保将日志文件预先调整为可观的大小,以便每次都不必增长10%(当您使用当前日志空间进行更改时)。

或者将其与codymanix的回答结合起来

答案 2 :(得分:1)

我可以考虑尝试两件事:

  • 首先将UPDATE数据截断为32个字符;这个可能会帮助ALTER更快地运行,因为它本身不需要进行任何截断。如有必要,UPDATE可以进行批处理

或者

  • 使用临时名称
  • 创建新的nvarchar(32)
  • nvarchar(max)
  • 填充它
  • DROP nvarchar(max)
  • (32)列重命名为(max)列的原始名称

答案 3 :(得分:0)

请参阅this.

您也可以指定超时计数器或仅通过GUI禁用它。

答案 4 :(得分:0)

执行该语句时,打开另一个SSMS副本,然后运行语句

sp_who2

除其他外,这将显示一个名为“BlkBy”的列。这是一个可能阻止查询完成的进程的SPID。您可能在系统中的其他位置有一个打开的事务。如果你知道那个过程是什么,并且你知道它不会炸毁你的宇宙,那就杀掉它。