Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
o-o
Guest |
invm, мы, конечно, завидуем тем, у кого сегодня все хорошо, но сейчас придет ТС и скажет, а где просили триггер или процедуру, так что не подходит все равно ![]() |
27 апр 15, 13:51 [17569117] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
тоже 2 NULL- a пропускает :) |
||
27 апр 15, 13:51 [17569119] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
Айболит-66 смотрел? Нормальные герои всегда идут в обход :)) |
||||
27 апр 15, 13:53 [17569134] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
а зачем OR id1<>id2? и почему никому не нравится "в лоб" 17568675? |
||
27 апр 15, 13:58 [17569160] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
Говорю же, спроектировано из рук вон плохо. |
||
27 апр 15, 14:05 [17569205] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
alter table dbo.t add constraint ck_1 check(sign(id1) + sign(id2) is null and coalesce(sign(id1), sign(id2), 2) <> 2);
1. Спортивный интерес :) 2. Если будет "один из трех" и т.д. - "простое" перестает быть простым. |
||||
27 апр 15, 14:08 [17569231] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
iap, про как спроектировано -- да. но все же понедельник рулит, все сегодня запутались ровно в двух соснах :) |
27 апр 15, 14:09 [17569232] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
![]() |
||||||
27 апр 15, 14:14 [17569267] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
на тот случай есть спасительный и супер-читабельный CASE не заморачиваемся только на случай двоих, а 3 и дальше разруливает вполне компактно: alter table dbo.t add constraint ck_1 check( case when id1 is null then 0 else 1 end + case when id2 is null then 0 else 1 end + case when id3 is null then 0 else 1 end + ... <= 1); |
||
27 апр 15, 14:17 [17569291] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
фу, конечно = 1 вот и я в ту же лужу со всеми NULL-ами ![]() |
27 апр 15, 14:20 [17569309] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
declare @t table (a int null, b int null, check (sign(a) + sign(b) is null and coalesce(sign(a), sign(b), 2) <> 2)); insert into @t values (null, 2); insert into @t values (2, null); insert into @t values (1, 0); insert into @t values (null, null); select * from @t; |
||
27 апр 15, 14:22 [17569328] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
||
27 апр 15, 14:23 [17569335] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
invm, как-то SIGN() не воспринял... ![]() Облажался я в общем! Всё. Ухожу из этой темы. |
27 апр 15, 14:24 [17569345] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
нет давай продолжим alter table dbo.t add constraint ck_1 check((id1+id2) is null and isnull(id1,id2) is not null); |
||
27 апр 15, 14:30 [17569406] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47047 |
![]() |
||||
27 апр 15, 14:33 [17569441] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Еще один изврат: declare @t table (a int null, b int null, check (sign(isnull(sign(a) + 2, 0)) + sign(isnull(sign(b) + 2, 0)) = 1)); |
||
27 апр 15, 14:33 [17569448] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
![]() |
||
27 апр 15, 14:34 [17569457] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
alter table dbo.t add constraint ck_1 check(isnumeric(id1)+isnumeric(id2)=1); |
27 апр 15, 14:45 [17569563] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11562 |
alter table dbo.t add constraint ck_1 check(ISNULL(id1, ISNULL(id2, 0))<>0) |
27 апр 15, 14:48 [17569602] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
мимо |
||
27 апр 15, 14:51 [17569633] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11562 |
изначальные условия удовлетворяются (единственное ограничение, чтобы не было 0 значений в полях, но я думаю, что у ТС как раз такой случай) |
||||
27 апр 15, 14:53 [17569645] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
в нашем понедельничном полку прибыло ![]()
insert into dbo.t values(3, 3) --- (1 row(s) affected) select ISNULL(3, ISNULL(3, 0)) --- 3 |
||
27 апр 15, 14:53 [17569648] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11562 |
и ? видимо я тоже что-то упустил в описании. т.к. должен быть один из идентификатор, но не 2-а сразу? |
||||
27 апр 15, 14:55 [17569664] Ответить | Цитировать Сообщить модератору |
LexusR Member Откуда: Novosibirsk Сообщений: 1887 |
дык чтобы не было 2-х сразу констрайнт и нужен :)) |
||||
27 апр 15, 14:57 [17569686] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
если бы я был ТС, я бы так уточнил: ![]() 1. гИбята, я не в кугсе (ц), но вообще-то в обоих полях могут быть НУЛЛ, поскольку в какие-то моменты может не быть ни соискателя, ни сотрудника. Обычно это вясняется, когда уже получилось ограничение ;-) 2. Вообще-то почему не быть обоим полям не НУЛЛ, то есть и сотрудник есть, и соискатель уже трётся |
27 апр 15, 14:59 [17569700] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |