Как создать уникальное ограничение для существующей таблицы в SQL Server 2005?
Я ищу как TSQL, так и то, как это сделать в диаграмме базы данных.


ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
Вы ищете что-то вроде следующего
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b
На диаграмме студии управления выберите таблицу, щелкните правой кнопкой мыши, чтобы добавить новый столбец, если хотите, щелкните правой кнопкой мыши столбец и выберите «Проверить ограничения», там вы можете добавить его.
Я также обнаружил, что это можно сделать с помощью диаграмм базы данных.
Щелкнув правой кнопкой мыши по таблице и выбрав Индексы / Ключи ...
Нажмите кнопку «Добавить» и измените столбцы на столбцы, которые вы хотите сделать уникальными.
Изменения уникальны для «Да».
Щелкните закрыть и сохраните диаграмму, и она добавит ее в таблицу.
ALTER TABLE [TableName] ADD CONSTRAINT [constraintName] UNIQUE ([columns])
Команда 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. для ряда ответов.
как вы это делаете в sql server 2005?
Это недостижимо в sql server 2005. Я настоятельно рекомендую перейти на более современную СУБД - с 12 апреля 2016 года это будет официально не поддерживается.
В SQL Server Management Studio Express:
Чтобы создать ограничение 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.
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
Это работает ... но ... почему ограничение отображается в папке INDEX вместо папки CONSTRAINTS. Он отображается с другим значком, но в любом случае он должен находиться в папке ограничений.