Исключение:
Violation of UNIQUE KEY constraint 'UQ__user_dat__AB6E61641273C1CD'. Cannot insert duplicate key in object 'dbo.user_data'.
The statement has been terminated.
AB6E61641273C1CD = электронная почта, которая является уникальной и ПУСТОЙ
Мой SQL-оператор НЕ вставляет значение для электронной почты. Таким образом, я предполагаю, что это будет иметь значение по умолчанию как пустой указатель (хотя я никогда не писал (пустой) оператор по умолчанию при составлении таблицы).
В чем проблема? Код работал в sqlite отлично.
Если вам нужен уникальный ключ, который игнорирует нули, это невозможно в SQL Server. Однако в этой статье описано, как можно добиться такого поведения через
Кроме того, в ответе AlexKuznestov отмечается, что в SQL 2008 вы можете предоставить фильтрованный индекс.
Лучшим из них является индексированное представление, но, как и триггер, его существование не всегда очевидно. Вычисляемый столбец - это интересно, но вам нужно иметь возможность гарантировать, что фактические данные никогда не столкнутся со столбцом, который вы "вычисляете".
Уникальное ограничение допускает только 1 нулевое значение в SQL Server, Oracle, например, допускает много NULLS
пример
create table test (id int)
CREATE UNIQUE NONCLUSTERED INDEX [IX_test] ON [dbo].[test]
insert test values(NULL)
--will fail
insert test values(NULL)
Msg 2601, Level 14, State 1, Line 1 Невозможно вставить дублирующую ключевую строку в объект 'dbo.test' с уникальным индексом 'IX_test'. Оператор был прерван.
Вероятно, у вас уже есть строка с нулевым значением в столбце электронной почты.
В SQL Server 2008 вместо этого можно использовать отфильтрованный индекс. SQL Server 2005 используйте индексированное представление.
Если вы используете SQL 2008, вы можете использовать отфильтрованный индекс, как предлагается здесь .
create unique nonclustered index idx on dbo.DimCustomer(emailAddress)
where EmailAddress is not null;
SQL Menace прав на 100%, если вы установите уникальный ключ на столбец, но разрешите нули, только один нуль разрешен в этом столбце для всех строк в таблице.
Пример:
Column with unique key
1
2
3
NULL
4
Чтобы столбец был уникальным, я могу ввести что угодно, кроме 1,2,3,4 или NULL