181

如何在 SQL Server 2005 中的现有表上创建唯一约束?

我正在寻找 TSQL 以及如何在数据库图中进行操作。

4

10 回答 10

273

SQL 命令是:

ALTER TABLE <tablename> ADD CONSTRAINT
            <constraintname> UNIQUE NONCLUSTERED
    (
                <columnname>
    )

在此处查看完整的语法。

如果您想从数据库图中执行此操作:

  • 右键单击表格并选择“索引/键”
  • 单击添加按钮以添加新索引
  • 在右侧的属性中输入必要的信息:
    • 您想要的列(单击省略号按钮选择)
    • 设置是唯一的
    • 给它一个合适的名字
于 2008-09-15T17:53:53.600 回答
84

在 SQL Server Management Studio Express 中:

  • 右键单击表格,选择修改设计(适用于更高版本)
  • 右键单击字段,选择索引/键...
  • 点击添加
  • 对于Columns,选择您希望唯一的字段名称。
  • 对于类型,选择唯一键
  • 点击关闭保存表格。
于 2009-08-21T18:32:39.087 回答
29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])
于 2008-09-15T17:45:34.163 回答
15

警告:您设置为唯一的列中只能有一个空行。

您可以使用 SQL 2008 中的过滤索引来执行此操作:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

请参阅字段值必须是唯一的,除非它对于一系列答案为 NULL。

于 2009-02-11T16:58:58.480 回答
13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]
于 2008-09-15T17:39:29.547 回答
10

我还发现你可以通过数据库图表来做到这一点。

通过右键单击表并选择索引/键...

单击“添加”按钮,然后将列更改为您希望唯一的列。

更改是唯一的。

单击关闭并保存图表,它会将其添加到表格中。

于 2008-09-15T17:43:57.367 回答
8

您正在寻找类似以下的内容

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

MSDN 文档

于 2008-09-15T17:42:11.020 回答
7

要在表已创建时在一个或多个列上创建 UNIQUE 约束,请使用以下 SQL:

ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

允许为上述查询命名唯一约束

ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)

MySQL / SQL Server / Oracle / MS Access 支持的查询。

于 2014-12-01T07:11:04.857 回答
5

在管理工作室图表中选择表,如果需要,右键单击添加新列,右键单击列并选择“检查约束”,在那里你可以添加一个。

于 2008-09-15T17:42:56.853 回答
0

在某些情况下,可能需要在创建唯一键之前确保它不存在。在这种情况下,下面的脚本可能会有所帮助:

IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
    ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name> 
GO

ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>) 
GO
于 2018-03-21T11:43:12.097 回答