将列类型从ntext更改为varbinary(max)

Dav*_*uda 5 database sql-server type-conversion

我有一张有ntext野外的桌子.MSDN表示ntext已弃用,他们建议使用其他数据类型:

将来的Microsoft SQL Server版本中将删除ntext,text和image数据类型.避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序.请改用nvarchar(max),varchar(max)和varbinary(max).

在我的特殊情况下,决定切换到varbinary(max).我试图改变表定义,但这不起作用.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);
Run Code Online (Sandbox Code Playgroud)

将类型更改为的可能性有哪些varbinary(max)我尝试从ntext- > nvarchar(max)然后从nvarchar(max)- > 更改类型varbinary(max)但是这是不可能的(错误:不允许从数据类型nvarchar(max)到varbinary(max)的隐式转换).

唯一可行的解​​决方案是添加一个新类型的列varbinary(max),将现有值转换为新列,然后删除旧列.这花了很多时间(在我的数据集大约15GB,大约需要30分钟).这就是为什么我正在研究实现相同的其他可能性(可能就地=没有移动数据和转换).

Joh*_*ers 4

我猜你选择了 varbinary(max) 因为你的 ntext 列中有非文本数据?在这种情况下,我认为您必须向表中添加一个单独的 varbinary(max) 列,然后运行转换操作以从 ntext 复制到新列。然后,删除旧列,并将新列重命名为旧名称。

“不允许从数据类型 nvarchar(max) 到 varbinary(max) 的隐式转换”意味着您必须明确转换。