我有一个包含ntext
字段的表格。 MSDN表示不推荐使用ntext
,并建议使用其他数据类型:
ntext,text和image数据类型将在Microsoft SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max),varchar(max)和varbinary(max)。
在我的特定情况下,决定切换到varbinary(max)
。我试图改变表定义但是没有用。
ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);
将类型更改为varbinary(max)
有哪些可能性?我尝试从ntext
- >更改类型nvarchar(max)
然后来自nvarchar(max)
- > varbinary(max)
但这是不可能的(错误:不允许从数据类型nvarchar(max)到varbinary(max)的隐式转换)。
唯一可行的解决方案是添加类型为varbinary(max)
的新列,将现有值转换为新列,然后删除旧列。这花了很多时间(在我的数据集大约15GB,大约需要30分钟)。这就是为什么我正在研究实现相同的其他可能性(可能就地=没有移动数据和转换)。
答案 0 :(得分:3)
我认为你使用了varbinary(max)因为你的ntext列中有非文本数据吗?在这种情况下,我认为您将不得不在表中添加单独的varbinary(max)列,然后运行转换操作以从ntext复制到新列。然后,删除旧列,并将新列重命名为旧名称。
“不允许从数据类型nvarchar(max)到varbinary(max)的隐式转换”意味着您必须明确转换。
答案 1 :(得分:0)
似乎这种转换必须在某个时刻发生。如果你搜索,你会发现许多人从文本转到varchar(最大)并说明转换需要20多分钟。研究了几分钟后我的两分钱,所以不要把它当作福音。
如果您的表只是插入,您可以转换保留表中的现有数据,然后重命名表,以便保留然后生成。然后在停机期间从旧表中移动任何新创建的数据。
处理更新当然会使事情变得更加复杂。
答案 2 :(得分:0)
添加额外列可能是最好的方法。 我倾向于采取措施降低风险