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

时间:2019-02-22 14:16:32

标签: sql sql-server sql-server-2016

我需要有关如何将具有5亿条记录的表的列数据类型从varchar更改为nvarchar的建议。

谢谢。

3 个答案:

答案 0 :(得分:5)

您只需要发出ALTER TABLE声明

ALTER TABLE YourTable ALTER COLUMN YourColumn nvarchar({required length});

您需要用大括号({})替换该部分,并用对象名称替换。

答案 1 :(得分:4)

  

对于具有5亿条记录的表。

由于表的大小,Larnu的答案非常正确,我想指出此线程:

Change datatype varchar to nvarchar in existing SQL Server 2005 database. Any issues?

和网址:http://rusanu.com/2011/10/20/sql-server-table-columns-under-the-hood/

  

此更改将添加一个新的NVARCHAR列,它将更新每一行   将dta从旧的VARCHAR复制到新的NVARCHAR列,然后   那么它将把旧的VARCHAR列标记为已删除。如果表是   大,这将生成大日志,因此请为此做好准备。

不幸的是,VARCHAR()-> NVARCHAR()并非仅更改元数据,因此不像INT-> BIGINT

因此,建议在维护窗口中进行更改,并进一步删除标记为“已删除”的列:

DBCC CLEANTABLE 
-- or
ALTER TABLE ... REBUILD

答案 2 :(得分:0)

所以,我所做的就是 1.使用nvarchar为所需列创建一个新表 2.使用sis将数据从现有表复制到新表。 3.在新表上创建约束和索引。 所有这些步骤都可以在应用程序仍然启动并运行时完成 4.将现有表重命名为_Old并将新表重命名为现有表的名称 以上步骤几乎不需要一秒钟,并且是应用程序关闭时的唯一步骤。

像这样,我能够减少应用程序停机时间并成功更改列数据类型。