Содержание
Замена 0 на Null
В запросах Insert Values и Update, константа 0 или параметр со значением 0 заменяется на Null при записи в поле, если поле является ссылкой и поддерживает запись Null.
Работает только для константы 0. Значения выражений и запросов результат которых равен 0 не преобразовывается. Например 0+0 или даже (0).
Это замена не работает в хранимых процедурах.
Procedure OnCreate; Var Name : String; Group : Integer; Begin Name := 'test'; Group := 0; // При выполнении этого запроса Group будет заменено на Null (Insert Into Clients(Name, Group) Values(:Name, :Group)); // При выполнении этого запроса Group будет заменено на Null (Update Clients Set Group=:Group Where Name=:Name); // При выполнении этого запроса 0 будет заменено на Null (Update Clients Set Group=0 Where Name=:Name); // При выполнении этих запросов Group НЕ БУДЕТ заменено на Null (Update Clients Set Group=(:Group) Where Name=:Name); (Update Clients Set Group=:Group+0 Where Name=:Name); (Insert Into Clients(Name, Group) Select :Name, :Group); End;
Это сделано, что бы в программе не работать со значениями Null. К сожалению значения Null обязательны для корректной работы внешних ключей и JOIN-ов.
При извлечении значения Null из базы данных, он автоматически заменяется на 0, 0c, '' или NullDatetime.
Procedure OnCreate; Var Name : String; Group : Integer; Begin Name := 'test'; // При выполнении этого запроса Null будет заменено на 0 Group := (Single Group From Clients Where Name=:Name); End;
Можно сделать замену 0 на Null и для выражений, но это снизит производительность.