在SQL Server 2008中为nvarchar(最大)改变从varchar(最大值)的数据列(

2019-09-17 06:06发布

我从varchar(最大)在SQL Server 2008中的表更改数据类型为nvarchar(最大)。 此表中有数据。 有没有办法来改变数据类型,而不会丢失数据?

Answer 1:

你可以用标准的语法修改表:

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max)

你可能会想然而,重建任何索引,以确保它们正常工作。



Answer 2:

另一种选择,以尽量减少破坏(因为我不相信ALTER COLUMN将在网上发生),方法是:

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

现在,您可以更新波/批次/交易而不是一个长期的交易将改变整个表中的数据。 当你确信该数据被复制,您可以删除旧的列,重命名新的,重新创建任何受影响的索引(您的MAX列不能在任何指数的关键,但你可能有无意中把它变成一个INCLUDE定义 - 如果是这样的话,你应该质疑反正)。

你仍然要重建所有索引收回现在未使用的空间(你可以,如果你正在使用企业版在网上做)。



Answer 3:

务必进行备份,以便无论你可以去会发生什么回事情的方式。

随着中说更改varchar(max)nvarchar(max)应该不会丢失数据。

旁注:你可能有顾虑,如果你是在另一个方向改变nvarchar(max)varchar(max)的进程必须转换扩展字符,如果任何人出席。



文章来源: Changing a data column from varchar(max) to nvarchar(max) in SQL Server 2008