我需要有关如何将具有5亿条记录的表的列数据类型从varchar
更改为nvarchar
的建议。
谢谢。
答案 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并将新表重命名为现有表的名称 以上步骤几乎不需要一秒钟,并且是应用程序关闭时的唯一步骤。
像这样,我能够减少应用程序停机时间并成功更改列数据类型。