MS SQL уникальный ключ, позволяющий неск. null
От: Flem1234  
Дата: 10.08.09 08:49
Оценка:
Мне нужно сделать ключ по полю, который
1. Позволяет null
2. Если значение не null, то оно должно быть уникально

БД — MS SQL Server 2005.
КАК?
Re: MS SQL уникальный ключ, позволяющий неск. null
От: MasterZiv СССР  
Дата: 10.08.09 08:53
Оценка:
Flem1234 пишет:

> Мне нужно сделать ключ по полю, который

> 1. Позволяет null
> 2. Если значение не null, то оно должно быть уникально
>
> БД — MS SQL Server 2005.
> КАК?

Так просто уникальный индекс, и всё.

Только вот NULL тебе дадут вставить ТОЛЬКО ОДИН
в такую таблицу. Если тебе нужно много, делай
индекс неуникальным, чтобы был индекс, а
уникальность проверяй триггером.
Posted via RSDN NNTP Server 2.1 beta
Re: MS SQL уникальный ключ, позволяющий неск. null
От: sunsquirel США  
Дата: 10.08.09 08:54
Оценка: +1
Здравствуйте, Flem1234, Вы писали:

F>Мне нужно сделать ключ по полю, который

F>1. Позволяет null
F>2. Если значение не null, то оно должно быть уникально

F>БД — MS SQL Server 2005.

F>КАК?

Это только вручную проверять, потому что UNIQUE key подразумевает только один NULL.
Re: MS SQL уникальный ключ, позволяющий неск. null
От: Lloyd Россия  
Дата: 10.08.09 08:54
Оценка: 5 (1) +1
Здравствуйте, Flem1234, Вы писали:

F>Мне нужно сделать ключ по полю, который

F>1. Позволяет null
F>2. Если значение не null, то оно должно быть уникально

F>БД — MS SQL Server 2005.

F>КАК?

Первое, что пришло в голову:
1. Триггер
2. Материализованная вьюха с фильтром по col IS NOT NULL и уникальным ключом по col (не уверен, что будет работать).
Re[2]: MS SQL уникальный ключ, позволяющий неск. null
От: Lloyd Россия  
Дата: 10.08.09 09:35
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Первое, что пришло в голову:

L>1. Триггер
L>2. Материализованная вьюха с фильтром по col IS NOT NULL и уникальным ключом по col (не уверен, что будет работать).

3. Если в таблице есть первичный ключ, то можно поиграться с индексами по вычислимой колонке.
Re: MS SQL уникальный ключ, позволяющий неск. null
От: . Великобритания  
Дата: 10.08.09 09:49
Оценка: 5 (2)
Flem1234 wrote:

> Мне нужно сделать ключ по полю, который

> 1. Позволяет null
> 2. Если значение не null, то оно должно быть уникально
Сделать ещё одну таблицу, в ней первое поле — pk будет reference key на pk твоей таблицы (т.е. связь 1->0..1) и второе поле — твоё поле с unique индексом.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: MS SQL уникальный ключ, позволяющий неск. null
От: Аноним  
Дата: 10.08.09 19:43
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Мне нужно сделать ключ по полю, который

F>1. Позволяет null
F>2. Если значение не null, то оно должно быть уникально

F>БД — MS SQL Server 2005.

F>КАК?

если есть возможность мигрировать на MS SQL 2008, то там это уже есть:

create unique index unq_index on test_unique(value)
where value is not null;

для 2005 предложение которое звучало выше — играться с вычислимыми колонками

create table test_unique (
id integer primary key,
value integer,
value1 as (case when value is null then -id else value end)
);
create unique index unq_index on test_unique (value1);

insert into test_unique values (1, 1);
insert into test_unique values (2, null);
insert into test_unique values (3, null);
insert into test_unique values (4, 2);
--insert into test_unique values (5, 1); -- Error!

Нужно, чтобы не было пересечения по значениям между id и value (выше например подразумевается, что value положительно), возможно еще придется делать преобразование типов если value — это строка и т.д.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.