【问题标题】:How can add UNIQUE column to a table in a SQL Server database?如何将 UNIQUE 列添加到 SQL Server 数据库中的表?
【发布时间】:2015-07-23 09:07:01
【问题描述】:

我的表中需要UNIQUE 列。

我的桌子:

CREATE TABLE my_table
(
      id int IDENTITY PRIMARY KEY,
      name text NOT NULL UNIQUE,
      blabla text NOT NULL
);

我得到一个错误:

表 'my_table' 中的列 'name' 的类型对 用作索引中的键列。无法创建约束或索引。 查看以前的错误。

那么,如何在表格中添加UNIQUE 列?

【问题讨论】:

  • 您的错误说明了一切,您不能在像 text 这样的 LOB 字段上添加唯一约束。我想你想要VARCHAR / CHAR
  • 您真的需要name 字段为TEXT 类型吗?您确定要在其中存储千兆字节的数据吗?
  • ntexttextimage 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)varchar(max)varbinary(max)See details here
  • 使用varchar(n)(其中n是所需的最大长度)而不是已弃用的text数据类型

标签: sql-server database unique


【解决方案1】:

您应该使用 VARCHAR / NVARCHAR 而不是 TEXT,因为不推荐使用 TEXT 数据类型 - 请参阅 https://msdn.microsoft.com/en-us/library/ms187993.aspx

CREATE TABLE my_table
(
      id int IDENTITY PRIMARY KEY,
      name VARCHAR(100) NOT NULL CONSTRAINT UQ_my_table_name UNIQUE,
      blabla VARCHAR(100) NOT NULL
);

另外,请考虑命名您的约束,而不是为其设置默认名称。

【讨论】:

    【解决方案2】:

    所以问题在于您为列名指定的数据类型。本质上,“文本”是一种大对象 (LOB) 数据类型。 SQL 不允许在此特定数据类型上创建索引。这种数据类型的其他示例包括 varchar(max)、nvarchar(max)、varbinary(max)、xml 和 image。

    我认为这主要是因为这些索引从一开始就没有分配任何特定的数据大小,因此如果超过了最大限制,则必须更改创建的任何索引。

    https://msdn.microsoft.com/en-us/library/ms188783.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多