【问题标题】:Alter Column Datatype from Int to Ntext and vice-versa将列数据类型从 Int 更改为 Ntext,反之亦然
【发布时间】:2011-04-11 07:29:04
【问题描述】:

我有一个 SQL 表:

CREATE TABLE [UserTable]
(
    [ID] [int] NULL,
    [Name] [nvarchar](50) NULL,
    [City] [nvarchar](50) NULL
) ON [PRIMARY]

在此表中,ID 列的数据类型为 int。我想把ID列的数据类型改成Ntext

为此,我使用以下 Sql 查询:

ALTER TABLE UserTable
ALTER COLUMN ID NTEXT

此查询给出以下错误消息:

消息 206,第 16 级,状态 2,第 1 行 操作数类型冲突:int is 与ntext不兼容

当我将 ID 列数据类型从 Int 更改为 navarchar 时,它工作正常。

之后我尝试将 ID(现在 Id 列的数据类型为 Nvarchar)列数据类型通过 Alter Query 更改为 Ntext strong> 它成功地改变了 ID 列数据类型。

为什么我们不能直接将列数据类型更改为 Int 到 Ntext,而我们可以在 Nvarchar 到 Ntext 之后通过 INT 到 Nvarchar 来做到这一点?

【问题讨论】:

  • ntext 已被 NVARCHAR(MAX) 弃用,不应用于新工作。到底为什么要将int 列转换为ntext
  • @Martin:没有任何具体原因,我只是为了测试目的而尝试这样做,我收到了错误消息,所以想知道这个错误。

标签: sql-server


【解决方案1】:

您正在尝试进行隐式转换,即disallowed from int to ntext。为什么,我不知道,但我猜是因为它有 2 个步骤(int->string,string->LOB)。

另外,不要使用 ntext。它已被弃用。使用应该允许隐式转换的 nvarchar(max)。

最后,如果 ID 是主键,那么为什么需要 LOB 类型?你确实有一个主键...?

【讨论】:

  • @GNB:我没有在实际应用中使用它,我只是测试一些东西,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2020-10-24
  • 1970-01-01
  • 2020-07-08
相关资源
最近更新 更多