SQL Server 2005如何创建唯一约束?


Answers:


272

SQL命令是:

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

请参阅此处的完整语法。

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

  • 右键点击表格,然后选择“索引/键”
  • 单击添加按钮添加新索引
  • 在右侧的属性中输入必要的信息:
    • 所需的列(单击省略号按钮进行选择)
    • 将“唯一”设置为“是”
    • 给它起一个合适的名字

1
它起作用...但是...为什么约束显示在INDEX文件夹而不是CONSTRAINTS文件夹下。它显示有另一个图标,但是无论如何它应该位于constraints文件夹中。
费尔南多·托雷斯

84

在SQL Server Management Studio Express中:

  • 右键单击表,选择“ 修改”或“ 设计”(对于更高版本)
  • 右键单击字段,选择索引/键...
  • 点击添加
  • 对于,选择要唯一的字段名称
  • 对于类型,选择唯一键
  • 点击关闭保存表格。

29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])

15

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

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

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

请参见字段值必须唯一,除非对于一系列答案,该字段值为NULL


如何在sql server 2005中执行此操作?
Maxrunner,2015年

2
在sql server 2005中无法实现。我强烈建议升级到更新的
RDBMS-它将自


10

我还发现您可以通过数据库图来执行此操作。

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

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

更改为唯一。

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


8

您正在寻找以下内容

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

MSDN文件


6

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

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

允许为上述查询命名UNIQUE约束

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

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


UNIQUE NONCLUSTERED选项 PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
Kiquenet '16

5

在Management Studio图表中,选择表,然后根据需要右键单击以添加新列,右键单击该列并选择“检查约束”,然后可以在其中添加一个。


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.