如何在SQL Server 2005中的现有表上创建唯一约束?
我正在寻找TSQL以及如何在数据库图中进行操作。
如何在SQL Server 2005中的现有表上创建唯一约束?
我正在寻找TSQL以及如何在数据库图中进行操作。
Answers:
SQL命令是:
ALTER TABLE <tablename> ADD CONSTRAINT
<constraintname> UNIQUE NONCLUSTERED
(
<columnname>
)
请参阅此处的完整语法。
如果要从数据库图中执行此操作:
警告:您设置为唯一的列中只能有一个空行。
您可以使用SQL 2008中的筛选索引来执行此操作:
CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;
请参见字段值必须唯一,除非对于一系列答案,该字段值为NULL。
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
我还发现您可以通过数据库图来执行此操作。
通过右键单击表格并选择索引/键...
点击“添加”按钮,然后将列更改为您希望唯一的列。
更改为唯一。
单击关闭并保存该图,它将添加到表中。
要在已经创建表之后在一个或多个列上创建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
?
在某些情况下,可能希望在创建唯一键之前确保它不存在。在这种情况下,以下脚本可能会有所帮助:
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