SQL Server 2005 уникальный ключ с нулевым значением - PullRequest
8 голосов
/ 12 мая 2011

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

Ответы [ 4 ]

9 голосов
/ 12 мая 2011

Это давняя жалоба на уникальные ограничения / индексы SQL Server.Лучшее решение - создать представление с привязкой к схеме и затем поместить уникальный индекс в этот столбец:

Create View dbo.MyUniqueColView
With SchemaBinding
As
Select MyColToBeUnique
From MyTable
Where MyColToBeUnique Is Not Null

GO

Create Unique Clustered Index IX_MyTable_MyColToBeUnique On MyUniqueColView ( MyColToBeUnique )
1 голос
/ 12 мая 2011

Вы не можете применить это с помощью ограничения уровня таблицы в SQL Server 2005, но вы можете создать представление с определением SELECT Col FROM t WHERE Col IS NOT NULL, а затем создать уникальный кластеризованный индекс для этого.

0 голосов
/ 12 мая 2011

Всегда мое раздражение. Я предпочитаю «другое» толкование стандарта.

См. Создание уникального ограничения, которое игнорирует пустые значения в SQL Server . Он охватывает три разных подхода.

  1. Решение 1. Отфильтрованные индексы.

    Это кажется довольно распространенным, судя по другим ответам. Я не пробовал этот подход - он требует SQL Server 2008, хотя.

  2. Решение 2: ограничение на вычисляемый столбец

    Я использовал это, и оно работает. Однако, возможно, потребуется скорректировать отношения и / или добавить вторичное неуникальное покрытие с индексами (одно для ограничения уникальности, одно для покрытия индекса).

  3. Решение 3: Ограничение проверки UDF (не рекомендуется)

    Ах, сила TSQL (читай: что-то , еще , чтобы иметь дело с). Я не пошел по этому маршруту.

Счастливого кодирования.

0 голосов
/ 12 мая 2011

В SQL Server 2008 вы можете создать отфильтрованный индекс для значений, которые не равны нулю - к сожалению, это новая функция в выпуске 2008 года, поэтому в 2005 году боюсь, ты не в состоянии сделать что-либо подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...