我必须将SQL Server 2008表中的数据类型从varchar(max)更改为nvarchar(max)。该表中包含数据。有没有办法在不丢失数据的情况下更改数据类型?
答案 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开始,这现在可以是联机操作