【发布时间】:2010-09-09 01:30:11
【问题描述】:
如何在 SQL Server 2005 中对现有表创建唯一约束?
我正在寻找 TSQL 以及如何在数据库图中找到它。
【问题讨论】:
标签: sql sql-server constraints
如何在 SQL Server 2005 中对现有表创建唯一约束?
我正在寻找 TSQL 以及如何在数据库图中找到它。
【问题讨论】:
标签: sql sql-server constraints
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
【讨论】:
【讨论】:
在管理工作室图表中选择表,如果需要,右键单击添加新列,右键单击列并选择“检查约束”,您可以添加一个。
【讨论】:
我还发现你可以通过数据库图表来做到这一点。
通过右键单击表格并选择索引/键...
单击“添加”按钮,然后将列更改为您希望唯一的列。
更改是唯一的。
单击关闭并保存图表,它会将其添加到表格中。
【讨论】:
ALTER TABLE [TableName] ADD CONSTRAINT [constraintName] UNIQUE ([columns])
【讨论】:
SQL命令是:
ALTER TABLE <tablename> ADD CONSTRAINT
<constraintname> UNIQUE NONCLUSTERED
(
<columnname>
)
查看完整语法here。
如果您想从数据库图表中执行此操作:
【讨论】:
警告:您设置为唯一的列中只能有一个空行。
您可以使用 SQL 2008 中的过滤索引来做到这一点:
CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;
请参阅Field value must be unique unless it is NULL 了解一系列答案。
【讨论】:
在 SQL Server Management Studio Express 中:
【讨论】:
要在表已创建时为一列或多列创建唯一约束,请使用以下 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 支持的查询。
【讨论】:
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
【讨论】: