我有一个表,已 ntext 领域。 MSDN 说的 ntext 是废弃和他们提出的其他数据的类型:

ntext、文本和图像的数据类型将被删除的未来版本中Microsoft SQL服务器。避免使用这些数据的类型在新的开发工作,并计划修改应用于目前使用它们。使用限(最大值)varchar(最大值)和varbinary(最大值),而不是。

在我的特别情况下决定关于 varbinary(max).我试着改变表中的定义,但没有工作。

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);

有什么可能性更改类型 varbinary(max)? 我试着变化的类型 ntext -> nvarchar(max) 然后从 nvarchar(max) -> varbinary(max) 但那是不可能的(错误:隐含转化数据的类型限(最大值)为varbinary(最大值)不允许的)。

唯一的工作方案中增加一个新类型的列 varbinary(max), 转换的现有价值的新柱,然后降老列。这需要太多的时间(在我的数据集的大约15GB需要大约30分钟)。这就是为什么我调查的其他可能性来实现相同(可能是在地方=没有移动数据和转换)。

有帮助吗?

解决方案

我想你去varbinary(最大值),因为你的ntext列有非文本中的数据?在这种情况下,我认为你需要添加一个单独的varbinary(最大值)列到你的桌上,然后运行的一个转换操作要复制从ntext到新列。然后,删除旧列,并重新命名新列旧名称。

"隐性转换数据的类型限(最大值)为varbinary(最大值)不允许"意味着你必须要明确有关的转换。

其他提示

这似乎是这种转化是必须要发生在某一点。如果你搜索,你会找到很多人将从文字到varchar(最大值),并说明它需要20分钟来的转换。我的两个分研究后几分钟,所以,不要把它作为福音。

如果你的表只是需要插入,可转换现有的数据保持在一个表格然后重新命名的表格所以保持随后的生产。然后转移的任何新建立的数据从旧表在你下来的时间。

处理更新,使事情变得更复杂的课程。

添加的额外收列可能是最好的路要走。我喜欢做这种事的步骤,以减少风险

  1. 加列varbinary(最大值)作为nullable
  2. 修改你的插入的代码来填充的两列
  3. 在你的休闲,说一夜之间,运行更新声明与一个铸造
  4. 删除所有代码支持老柱,确保新的列读
  5. 下降的老列,并改变新列为不可null如果需要的话
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top