С SQL Server я хочу уникальный индекс только для ненулевых значений
Возможный дубликат:
УНИКАЛЬНОЕ ограничение SQL Server с повторяющимися значениями NULL
В Sql Server я хотел бы иметь столбец, который имеет как нулевые, так и реальные значения. Если столбец имеет значение, я хочу убедиться, что он уникален. Столбец может иметь несколько строк с нулевым значением для этого столбца.
Например, предположим, что у меня была таблица книг с 3 столбцами, а именно:
Book Number - identity
Title - varchar
ISBN - char
Теперь у таблицы будет первичный ключ со столбцом идентификаторов, и это хорошо. Вопрос будет на колонке ISBN. Я не хочу, чтобы какой-либо номер ISBN появлялся в таблице более одного раза, но будет много книг без номера ISBN (так как я его не знаю).
Есть ли способ (или каков наилучший способ) сообщить об этом ограничении на ISBN?
1 ответ
В SQL Server 2008 вы можете создать отфильтрованный индекс, например:
CREATE UNIQUE INDEX indexName ON tableName(isbn) WHERE isbn IS NOT NULL
В более ранних версиях создайте вычисляемый столбец, который является ISBN, когда он существует, и первичным ключом, когда ISBN равен нулю:
CREATE TABLE tableName (
pk int identity(1,1) primary key,
isbn int NULL,
nullbuster as (case when isbn is null then pk else 0 end),
CONSTRAINT dupNulls_uqX UNIQUE (isbn)
)
Скопировано из уникального ограничения SQL Server с дублирующимися значениями NULL, так что это в режиме вики:)