Reputation: 2751
I have SQL Server 2008 R2 and I want to set a unique column.
There seems to be two ways to do this: "unique index" and "unique constraint". They are not much different from what I understand, although unique constraint is recommended by most, because you also get an index automatically.
How do I create a unique constraint?
ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)
Is there a way to create a unique constraint through the SQL Server Management Studio?
Upvotes: 168
Views: 285272
Reputation: 146218
If your column allows null then a unique CONSTRAINT won't work - (unless you really only want one row with a null there).
Instead you can create a filtered index with a WHERE
clause to achieve this:
CREATE UNIQUE NONCLUSTERED INDEX UX_Order_ColumnName ON [dbo].[Order]
(
OptionalColumnName
)
WHERE (OptionalColumnName IS NOT NULL)
Error you'll get with ADD CONSTRAINT
:
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.Order' and the index name 'UX_Order_ColumnName'. The duplicate key value is ().
Upvotes: 0
Reputation: 2066
ALTER TABLE [<Table_Name_Here>] DROP CONSTRAINT [<Constraint_Name_Here>];
<Constraint_Name_Here>
from the table <Table_Name_Here>
.ALTER TABLE [<Table_Name_Here>] ADD CONSTRAINT [<Constraint_Name_Here>] UNIQUE ([<Column_Name_Here>]);
<Constraint_Name_Here>
to the table <Table_Name_Here>
.<Column_Name_Here>
.<Column_Name_Here>
column must be unique across all rows in the table.In summary:
Upvotes: 0
Reputation: 49
When you are in a Design view of your table, click on your desired column and expand the Table Designer tab at the top toolbar. Select the Indexes/Keys option.~
Then Add a new constraint and choose the right column and set its type to Unique Key, and name it somehow. And that's all! ^^
Upvotes: 3
Reputation: 756
One thing not clearly covered is that microsoft sql is creating in the background an unique index for the added constraint
create table Customer ( id int primary key identity (1,1) , name nvarchar(128) )
--Commands completed successfully.
sp_help Customer
---> index
--index_name index_description index_keys
--PK__Customer__3213E83FCC4A1DFA clustered, unique, primary key located on PRIMARY id
---> constraint
--constraint_type constraint_name delete_action update_action status_enabled status_for_replication constraint_keys
--PRIMARY KEY (clustered) PK__Customer__3213E83FCC4A1DFA (n/a) (n/a) (n/a) (n/a) id
---- now adding the unique constraint
ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)
-- Commands completed successfully.
sp_help Customer
---> index
---index_name index_description index_keys
---PK__Customer__3213E83FCC4A1DFA clustered, unique, primary key located on PRIMARY id
---U_Name nonclustered, unique, unique key located on PRIMARY name
---> constraint
---constraint_type constraint_name delete_action update_action status_enabled status_for_replication constraint_keys
---PRIMARY KEY (clustered) PK__Customer__3213E83FCC4A1DFA (n/a) (n/a) (n/a) (n/a) id
---UNIQUE (non-clustered) U_Name (n/a) (n/a) (n/a) (n/a) name
as you can see , there is a new constraint and a new index U_Name
Upvotes: 9
Reputation: 19506
Here's another way through the GUI that does exactly what your script does even though it goes through Indexes (not Constraints) in the object explorer.
Upvotes: 23
Reputation: 154101
They really make you run around the barn to do it with the GUI:
Make sure your column does not violate the unique constraint before you begin.
alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);
Changes take effect immediately:
Command(s) completed successfully.
Upvotes: 211
Reputation: 453910
To create these constraints through the GUI you need the "indexes and keys" dialogue not the check constraints one.
But in your case you just need to run the piece of code you already have. It doesn't need to be entered into the expression dialogue at all.
Upvotes: 69