Mar*_*aff 6 sql-server ddl transaction-log
我有一个超过 4 亿行的表,想将其中一列的数据类型转换datetime为datetime2(2).
datetime
datetime2(2)
如果我执行我的语句,我会收到以下错误:
由于“ACTIVE_TRANSACTION”,数据库“xxxx”的事务日志已满
那么这里有没有可能更新这个表?
(我的日志文件的最大大小为 150GB,我没有更多可用空间。)
小智 5
斯科特的回答让我意识到你可能有足够的空间 来做这个:创建一个带有临时名称的 datetime2 列,并将原始列内容分批传输到它(以防止你的日志空间不足——我假设你的数据库处于简单恢复模式)。 然后删除原始列,并将新列重命名为旧列名。
Sco*_*red 0
一种选择“可能”是将BCP导出当前数据(同时将相关列转换为其新数据类型)到平面文件,删除并使用新数据类型重新创建表,然后使用 -b 参数BCP导入数据限制每个批次中记录的行数,从而防止事务日志空间不足。
归档时间:
8 年,7 月 前
查看次数:
1931 次
最近记录:
5 年,4 月 前