我需要一个查询,它会将单个列从nvarchar(max)更改为32.真正的问题是此表有800,000行。而我的alter table myTable alter column mycolumn语句超时了。有什么建议或提示吗?
答案 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。您可能在系统中的其他位置有一个打开的事务。如果你知道那个过程是什么,并且你知道它不会炸毁你的宇宙,那就杀掉它。