我必须将 SQL Server 2008 表中的数据类型从 varchar(max) 更改为 nvarchar(max)。该表中有数据。有没有办法在不丢失数据的情况下更改数据类型?
问问题
37808 次
4 回答
17
您可以只使用标准语法来更改表:
ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max)
但是,您可能希望重建任何索引,以确保它们按预期工作。
于 2012-05-15T20:28:09.760 回答
7
另一个减少中断的选择(因为我不相信ALTER COLUMN
会在线发生)是:
ALTER TABLE dbo.table ADD new_column NVARCHAR(MAX); -- metadata operation
现在您可以更新 wave/batches/transactions 中的数据,而不是在一个长事务中将更改应用于整个表。当您对复制的数据感到满意时,您可以删除旧列,重命名新列,然后重新创建任何受影响的索引(您的 MAX 列不能在任何索引的键中,但您可能有无意中将其放入 INCLUDE 定义中 - 如果是这种情况,您无论如何都应该质疑)。
您仍然需要重建所有索引以回收现在未使用的空间(如果您使用的是企业版,您可以在线执行此操作)。
于 2012-05-15T20:33:01.347 回答
2
始终进行备份,这样无论发生什么,您都可以回到原来的状态。
话虽如此,从更改varchar(max)
为nvarchar(max)
不应该丢失数据。
旁注:如果您在另一个方向更改,您可能会担心 nvarchar(max)
,varchar(max)
因为如果存在任何扩展字符,该过程必须转换。
于 2012-05-15T20:31:53.797 回答
0
从 SQL Server 2016 开始,这现在可以是联机操作
于 2020-02-17T15:40:41.353 回答