Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Триггер  [new]
o-o
Guest
invm,
мы, конечно, завидуем тем, у кого сегодня все хорошо,
но сейчас придет ТС и скажет, а где компот?
просили триггер или процедуру, так что не подходит все равно
27 апр 15, 13:51    [17569117]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
invm
alter table dbo.t add constraint ck_1 check(id1 + id2 is null);
:)

тоже 2 NULL- a пропускает :)
27 апр 15, 13:51    [17569119]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
iap
invm
alter table dbo.t add constraint ck_1 check(id1 + id2 is null);

:)
Оба NULLа пропустит.

Почему по-простому не написать
id1 IS NULL AND id2 IS NOT NULL OR id1 IS NOT NULL AND id2 IS NULL OR id1<>id2
???


Айболит-66 смотрел? Нормальные герои всегда идут в обход :))
27 апр 15, 13:53    [17569134]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
o-o
Guest
iap
Почему по-простому не написать
id1 IS NULL AND id2 IS NOT NULL OR id1 IS NOT NULL AND id2 IS NULL OR id1<>id2
???

а зачем OR id1<>id2?
и почему никому не нравится "в лоб" 17568675?
27 апр 15, 13:58    [17569160]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
o-o
а зачем OR id1<>id2?
Действительно.
Говорю же, спроектировано из рук вон плохо.
27 апр 15, 14:05    [17569205]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
iap
Оба NULLа пропустит.
Ага, прозевал. Поправимся:
alter table dbo.t add constraint ck_1 check(sign(id1) + sign(id2) is null and coalesce(sign(id1), sign(id2), 2) <> 2);

iap
Почему по-простому не написать

1. Спортивный интерес :)
2. Если будет "один из трех" и т.д. - "простое" перестает быть простым.
27 апр 15, 14:08    [17569231]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
o-o
Guest
iap,

про как спроектировано -- да.
но все же понедельник рулит, все сегодня запутались ровно в двух соснах :)
27 апр 15, 14:09    [17569232]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
invm
iap
Оба NULLа пропустит.
Ага, прозевал. Поправимся:
alter table dbo.t add constraint ck_1 check(sign(id1) + sign(id2) is null and coalesce(sign(id1), sign(id2), 2) <> 2);


iap
Почему по-простому не написать

1. Спортивный интерес :)
2. Если будет "один из трех" и т.д. - "простое" перестает быть простым.
id1=2 AND id2 IS NULL не пропустит!
27 апр 15, 14:14    [17569267]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
o-o
Guest
invm
2. Если будет "один из трех" и т.д. - "простое" перестает быть простым.

на тот случай есть спасительный и супер-читабельный 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]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
o-o
Guest
фу, конечно = 1
вот и я в ту же лужу со всеми NULL-ами
27 апр 15, 14:20    [17569309]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
iap
id1=2 AND id2 IS NULL не пропустит!
Это почему? :)
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]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
o-o
на тот случай есть спасительный и супер-читабельный CASE
Представления о компакности и читабельности у всех разные :)
27 апр 15, 14:23    [17569335]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
invm,

как-то SIGN() не воспринял...
Облажался я в общем!
Всё. Ухожу из этой темы.
27 апр 15, 14:24    [17569345]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
iap
invm,

как-то SIGN() не воспринял...
Облажался я в общем!
Всё. Ухожу из этой темы.

нет давай продолжим
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]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
LexusR
iap
invm,

как-то SIGN() не воспринял...
Облажался я в общем!
Всё. Ухожу из этой темы.

нет давай продолжим
alter table dbo.t add constraint ck_1 check((id1+id2) is null and isnull(id1,id2) is not null);
Ща функцию напишу!
27 апр 15, 14:33    [17569441]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
iap
как-то SIGN() не воспринял...
Облажался я в общем!
Всё. Ухожу из этой темы.
Да ладно вам. Сегодня понедельник - все лажают :)

Еще один изврат:
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]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
iap
Ща функцию напишу!
Не спортивно!
27 апр 15, 14:34    [17569457]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
alter table dbo.t add constraint ck_1 check(isnumeric(id1)+isnumeric(id2)=1);
27 апр 15, 14:45    [17569563]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
alter table dbo.t add constraint ck_1 check(ISNULL(id1, ISNULL(id2, 0))<>0)
27 апр 15, 14:48    [17569602]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Konst_One
alter table dbo.t add constraint ck_1 check(ISNULL(id1, ISNULL(id2, 0))<>0)

мимо
27 апр 15, 14:51    [17569633]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
LexusR
Konst_One
alter table dbo.t add constraint ck_1 check(ISNULL(id1, ISNULL(id2, 0))<>0)


мимо


изначальные условия удовлетворяются (единственное ограничение, чтобы не было 0 значений в полях, но я думаю, что у ТС как раз такой случай)
27 апр 15, 14:53    [17569645]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
o-o
Guest
в нашем понедельничном полку прибыло
Konst_One
alter table dbo.t add constraint ck_1 check(ISNULL(id1, ISNULL(id2, 0))<>0)

insert into dbo.t values(3, 3)   
---
(1 row(s) affected)

select ISNULL(3, ISNULL(3, 0))  
---
3
27 апр 15, 14:53    [17569648]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
o-o
в нашем понедельничном полку прибыло
Konst_One
alter table dbo.t add constraint ck_1 check(ISNULL(id1, ISNULL(id2, 0))<>0)


insert into dbo.t values(3, 3)   
---
(1 row(s) affected)

select ISNULL(3, ISNULL(3, 0))  
---
3


и ? видимо я тоже что-то упустил в описании. т.к. должен быть один из идентификатор, но не 2-а сразу?
27 апр 15, 14:55    [17569664]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Konst_One
o-o
в нашем понедельничном полку прибыло
пропущено...

insert into dbo.t values(3, 3)   
---
(1 row(s) affected)

select ISNULL(3, ISNULL(3, 0))  
---
3


и ? видимо я тоже что-то упустил в описании. т.к. должен быть один из идентификатор, но не 2-а сразу?


дык чтобы не было 2-х сразу констрайнт и нужен :))
27 апр 15, 14:57    [17569686]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
если бы я был ТС, я бы так уточнил:

1. гИбята, я не в кугсе (ц), но вообще-то в обоих полях могут быть НУЛЛ, поскольку в какие-то моменты может не быть ни соискателя, ни сотрудника. Обычно это вясняется, когда уже получилось ограничение ;-)

2. Вообще-то почему не быть обоим полям не НУЛЛ, то есть и сотрудник есть, и соискатель уже трётся
27 апр 15, 14:59    [17569700]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить