А разве if (old.A == new.A) (ну или != не достаточно?) Я триггеров не писал лет 8, (и вообще "чистого" SQL не видел года 3-4 уже -- коньструктора от SQLAlchemy хватало за глаза)
А оно вне триггеров употребляется? Или это что-то firebird specific? Не поленился посмотреть внутрь SQLAlchemy -- DISTINCT только в запросах употребляется, и в рефлекшне от dialects.firebird
SA триггеры не генерит, а в запросах делает (видимо) только DISTINCT в селектах на колонки. Там кодогенератор из собственного DSL в SQL с кешированием и прочим адом. Я погрепал DISTINCT и посмотрел вокруг (аккуратно -- чтобы мозг не расплавился)
кроме описанного у ребе (для триггеров), иногда это полезно для легковесной эмуляции типа опциональных значений, который в нормальных языках записывался бы, например, как "type option 'a = [ None | Some of 'a ]", в тех случаях, когда невозможно выделить какое-либо специальное значение для значения None, либо когда специальное значение будет неудобно в других смыслах (это же сраный sql, всё-таки).
я со старых mysql, interbase, oracle начинал, там такого не встречал сходу, поэтому... ((a is null and b is null) or a=b) (почему не другие варианты -- оптимизатор такое больше любит обычно). Но вообще -- буду знать на будущее, интересно.
MSSQL2008: Сообщение 156, уровень 15, состояние 1, строка 1 Неправильный синтаксис около ключевого слова "distinct". Поэтому приходится выкручиваться некрасивыми конструкциями вида
/me сразу вспомнил про правила вида: "в hash join null != null, в merge join null < null, в expect/intersect/union null == null". И это не противоречит определению: "два NULL не являются равным, но также они не являются неравными " :)
no subject
no subject
no subject
if (old.A is distinct from new.A) then exception ECannotChangeField;
no subject
Я триггеров не писал лет 8, (и вообще "чистого" SQL не видел года 3-4 уже -- коньструктора от SQLAlchemy хватало за глаза)
no subject
A=null(или null=B,null<>A,null<>B) возвращают null, которые интерпретируется как false, поэтому условие не выполняется.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
И какую роль играет здесь DISTINCT?
no subject
no subject
no subject
ага
no subject
Неправильный синтаксис около ключевого слова "distinct".
Поэтому приходится выкручиваться некрасивыми конструкциями вида
no subject
no subject
И это не противоречит определению: "два NULL не являются равным, но также они не являются неравными " :)