首页 > 解决方案 > 在未达到事务日志限制的情况下更改表中的数据类型

问题描述

我在 SQL Server 中有一个包含大约 1 亿行的巨大表,并且希望将数据类型从更改varcharnvarchar

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;

做到这一点的最佳方法是什么?

知道如何避免事务日志文件的极端增长吗?

标签: sqlsql-servertransactionsalter-tableselect-into

解决方案


您可能会发现创建新表、截断旧表然后重新插入会更快:

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;

一个警告:如果您有插入触发器或标识列,您可能需要注意。


推荐阅读