Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在SQL Server 2008中将数据列从varchar(max)更改为nvarchar(max)_Sql Server 2008 - Fatal编程技术网

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

Sql server 2008 在SQL Server 2008中将数据列从varchar(max)更改为nvarchar(max),sql-server-2008,Sql Server 2008,我必须将SQLServer2008表中的数据类型从varchar(max)更改为nvarchar(max)。这个表中有数据。有没有办法在不丢失数据的情况下更改数据类型?您可以使用标准语法来更改表: ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max) 不过,您可能需要重建任何索引,以确保它们按预期工作。始终备份,以便无论发生什么情况,都可以恢复原状 因此,从varchar(max)更改为nvarchar(max)不应丢失数据

我必须将SQLServer2008表中的数据类型从varchar(max)更改为nvarchar(max)。这个表中有数据。有没有办法在不丢失数据的情况下更改数据类型?

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

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max)

不过,您可能需要重建任何索引,以确保它们按预期工作。

始终备份,以便无论发生什么情况,都可以恢复原状

因此,从
varchar(max)
更改为
nvarchar(max)
不应丢失数据


旁注:如果您正在从另一个方向
nvarchar(max)
更改为
varchar(max)
,您可能会担心,因为如果存在扩展字符,该过程将必须转换扩展字符。

另一个最小化中断的选项(因为我不相信
更改列
将在线发生)是:

现在您可以更新waves/batches/transactions中的数据,而不是在一个长事务中将更改应用于整个表。当您对复制数据感到满意时,您可以删除旧列,重命名新列,并重新创建任何受影响的索引(MAX列不能位于任何索引的键中,但您可能无意中将其放入INCLUDE定义中—如果是这种情况,您应该对此提出疑问)


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

从SQL Server 2016开始,现在可以在线执行此操作

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