Як створити унікальне обмеження для існуючої таблиці в SQL Server 2005?
Я шукаю і TSQL, і як це зробити в діаграмі баз даних.
Як створити унікальне обмеження для існуючої таблиці в SQL Server 2005?
Я шукаю і TSQL, і як це зробити в діаграмі баз даних.
Відповіді:
Команда SQL:
ALTER TABLE <tablename> ADD CONSTRAINT
<constraintname> UNIQUE NONCLUSTERED
(
<columnname>
)
Повний синтаксис дивіться тут .
Якщо ви хочете зробити це з діаграми бази даних:
У SQL Server Management Studio Express:
Попередження: У стовпці, який ви встановили, унікальним може бути лише один нульовий рядок.
Це можна зробити з відфільтрованим індексом у 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]
Я також виявив, що ви можете це зробити за допомогою діаграм баз даних.
Клацнувши правою кнопкою миші таблицю та вибравши індекси / ключі ...
Натисніть кнопку "Додати" та змініть стовпці до стовпців, які ви хочете зробити унікальними.
Зміна унікальна для Так.
Клацніть закрити і збережіть діаграму, і вона додасть її до таблиці.
Ви шукаєте щось таке
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b
Щоб створити 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