А разве if (old.A == new.A) (ну или != не достаточно?) Я триггеров не писал лет 8, (и вообще "чистого" SQL не видел года 3-4 уже -- коньструктора от SQLAlchemy хватало за глаза)
А оно вне триггеров употребляется? Или это что-то firebird specific? Не поленился посмотреть внутрь SQLAlchemy -- DISTINCT только в запросах употребляется, и в рефлекшне от dialects.firebird
SA триггеры не генерит, а в запросах делает (видимо) только DISTINCT в селектах на колонки. Там кодогенератор из собственного DSL в SQL с кешированием и прочим адом. Я погрепал DISTINCT и посмотрел вокруг (аккуратно -- чтобы мозг не расплавился)
я со старых mysql, interbase, oracle начинал, там такого не встречал сходу, поэтому... ((a is null and b is null) or a=b) (почему не другие варианты -- оптимизатор такое больше любит обычно). Но вообще -- буду знать на будущее, интересно.
кроме описанного у ребе (для триггеров), иногда это полезно для легковесной эмуляции типа опциональных значений, который в нормальных языках записывался бы, например, как "type option 'a = [ None | Some of 'a ]", в тех случаях, когда невозможно выделить какое-либо специальное значение для значения None, либо когда специальное значение будет неудобно в других смыслах (это же сраный sql, всё-таки).
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
no subject
no subject
Я триггеров не писал лет 8, (и вообще "чистого" SQL не видел года 3-4 уже -- коньструктора от SQLAlchemy хватало за глаза)
no subject
A=null(или null=B,null<>A,null<>B) возвращают null, которые интерпретируется как false, поэтому условие не выполняется.
no subject
И какую роль играет здесь DISTINCT?
no subject
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
И это не противоречит определению: "два NULL не являются равным, но также они не являются неравными " :)