Flem1234 пишет:
> Мне нужно сделать ключ по полю, который > 1. Позволяет null > 2. Если значение не null, то оно должно быть уникально > > БД — MS SQL Server 2005. > КАК?
Так просто уникальный индекс, и всё.
Только вот NULL тебе дадут вставить ТОЛЬКО ОДИН
в такую таблицу. Если тебе нужно много, делай
индекс неуникальным, чтобы был индекс, а
уникальность проверяй триггером.
Posted via RSDN NNTP Server 2.1 beta
Re: MS SQL уникальный ключ, позволяющий неск. null
Здравствуйте, Flem1234, Вы писали:
F>Мне нужно сделать ключ по полю, который F>1. Позволяет null F>2. Если значение не null, то оно должно быть уникально
F>БД — MS SQL Server 2005. F>КАК?
Это только вручную проверять, потому что UNIQUE key подразумевает только один NULL.
Re: MS SQL уникальный ключ, позволяющий неск. null
Здравствуйте, 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, Вы писали:
L>Первое, что пришло в голову: L>1. Триггер L>2. Материализованная вьюха с фильтром по col IS NOT NULL и уникальным ключом по col (не уверен, что будет работать).
3. Если в таблице есть первичный ключ, то можно поиграться с индексами по вычислимой колонке.
Re: MS SQL уникальный ключ, позволяющий неск. null
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 — это строка и т.д.