我在SQL Server中有一个约有1亿行的巨大表,并希望将数据类型从varchar
更改为nvarchar
:
ALTER TABLE my_table
ALTER COLUMN comment NVARCHAR(250);
问题是我的重做日志会增长,直到硬盘已满。
我曾考虑过一种大宗交易,但这基本上只是一个陈述。
使用新数据类型创建新表时,临时表是否起作用?
CREATE TABLE my_table_new (comment NVARCHAR(250);
INSERT INTO my_table_new
SELECT *
FROM my_table;
-- or
SELECT comment
INTO my_table_new
FROM my_table;
DROP TABLE my_table;
什么是最好的方法?
任何想法我如何避免增长的日志文件?
您可能会发现创建新表,截断旧表并重新插入它更快:
select t.*
into temp_my_table
from my_table t;
truncate table my_table; -- back it up first!
alter table mytable alter column comment nvarchar(max); -- no need to be cheap here
insert into mytable
select t.*
from t;
一个警告:如果您有插入触发器或标识列,则可能要注意。