在SQL Server 2008中将数据列从varchar(max)更改为nvarchar(max)

时间:2012-05-15 20:22:11

标签: sql-server-2008

我必须将SQL Server 2008表中的数据类型从varchar(max)更改为nvarchar(max)。该表中包含数据。有没有办法在不丢失数据的情况下更改数据类型?

4 个答案:

答案 0 :(得分:17)

您可以使用标准语法来更改表格:

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max)

您可能希望重建任何索引,以确保它们按预期工作。

答案 1 :(得分:7)

最小化中断的另一个选择(因为我不相信ALTER COLUMN将在线发生),是:

ALTER TABLE dbo.table ADD new_column NVARCHAR(MAX); -- metadata operation

现在,您可以更新波形/批次/事务中的数据,而不是在一个长事务中将更改应用于整个表。当您对数据被复制感到满意时,您可以删除旧列,重命名新列,然后重新创建任何受影响的索引(您的MAX列不能在任何索引的键中,但您可能有无意中将其置于INCLUDE定义中 - 如果是这种情况,你应该质疑它。

您仍然希望重建所有索引以回收现在未使用的空间(如果您使用的是Enterprise Edition,则可以在线进行此操作)。

答案 2 :(得分:2)

总是进行备份,所以无论发生什么事,你都可以回到原来的样子。

据说,从varchar(max)更改为nvarchar(max)不应该丢失数据。

旁注:如果您正在向另一个方向nvarchar(max)更改为varchar(max),则可能会有疑虑,因为如果有任何扩展字符存在,则进程必须转换。

答案 3 :(得分:0)

从SQL Server 2016开始,这现在可以是联机操作

SQL 2016 ALTER COLUMN online