Sql 将具有大量数据的表的数据类型从varchar更改为nvarchar

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列,它将

我需要建议如何最好地将具有5亿条记录的表的列的数据类型从
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