Sql 将具有大量数据的表的数据类型从varchar更改为nvarchar
我需要建议如何最好地将具有5亿条记录的表的列的数据类型从Sql 将具有大量数据的表的数据类型从varchar更改为nvarchar,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,我需要建议如何最好地将具有5亿条记录的表的列的数据类型从varchar更改为nvarchar 提前感谢。您只需发出一条altertable语句即可 ALTER TABLE YourTable ALTER COLUMN YourColumn nvarchar({required length}); 您需要替换大括号({})中的部分,并替换为对象名称 对于一个有5亿条记录的表 虽然Larnu的答案非常正确,但由于表格的大小,我想指出以下线索: 和网址: 更改将添加一个新的NVARCHAR列,它将
varchar
更改为nvarchar
提前感谢。您只需发出一条
altertable
语句即可
ALTER TABLE YourTable ALTER COLUMN YourColumn nvarchar({required length});
您需要替换大括号({}
)中的部分,并替换为对象名称
对于一个有5亿条记录的表
虽然Larnu的答案非常正确,但由于表格的大小,我想指出以下线索:
和网址:
更改将添加一个新的NVARCHAR列,它将更新每一行
将dta从旧的VARCHAR复制到新的NVARCHAR列,以及
然后它会将旧的VARCHAR列标记为已删除。如果桌子是
大型,这将生成一个大型日志,因此请做好准备
不幸的是,VARCHAR()->NVARCHAR()不是唯一的元数据更改,所以不像INT->BIGINT
因此,建议在维护窗口运行更改,并进一步删除标记为“已删除”的列:
所以我所做的就是,
1.使用nvarchar为所需列创建新表
2.使用ssis将数据从现有表复制到新表。
3.在新表上创建约束和索引。
所有这些步骤都可以在应用程序仍在运行时完成
4.将现有表重命名为_Old,并将新表重命名为现有表的名称
上述步骤几乎不需要一秒钟,而且是应用程序关闭时的唯一步骤
这样,我就可以减少应用程序的停机时间,并成功地更改了列数据类型。这花费了6个多小时。寻找更快的方法。看看亚历山大的答案,@Panda1122。他提出了为什么这会很慢的原因,但你对此无能为力;您正在对数据类型进行根本性更改,因此需要重写整个列。您好@Panda1122,您的问题解决了吗?。如果是的话,你能把它标记为已回答吗?
DBCC CLEANTABLE
-- or
ALTER TABLE ... REBUILD