Использование значения по умолчанию при нулевой записи в Sybase

StackOverflow https://stackoverflow.com/questions/6334067

Вопрос

Доброе утро,

У меня есть вопрос относительно значений по умолчанию и значений NULL в Sybase ASE 12. Короче говоря: я унаследовал очень старую базу данных Sybase, а также внешний интерфейс PowerBuilder, расположенный поверх нее. Одна из рассматриваемых таблиц содержит несколько столбцов со значениями по умолчанию, а также ограничение not null. Таким образом, всякий раз, когда значение не предоставляется (примечание: не значение NULL), PowerBuilder создает соответствующий оператор вставки / обновления и просто не передает значение для этих пустых полей, которым база данных автоматически присваивает значение по умолчанию. Соус.

Теперь проблема: было решено добавить аудит всего приложения через интерфейс (плохая идея, я знаю, но не мой выбор). Функция была написана для абстрагирования процесса аудита, но проблема возникает из-за того, что она не видит никакой пользовательской записи как значения NULL и генерирует оператор вставки в таблицу аудита (также определенную с ограничением not null), предоставляя буквальный NULL для этих пустых столбцов. Sybase затем видит буквальное значение NULL и, как вы все знаете, рассматривает NULL как значение, а не «без записи».

Итак, вопрос: можно ли для записи NULL по умолчанию использовать значения по умолчанию со стороны базы данных? Я рассмотрел триггеры, но надеюсь, что мне повезет, и я смогу использовать какую-то конструкцию на уровне таблицы.

Спасибо за ваше время и внимание.

Ссылки:
Хороший пример рассматриваемой проблемы
http://www.sybaseteam .com / null-not-nothing-difference-between-null-nothing-sybase-t-390.html

См. таблицу 7-1 в середине страницы.
http : //manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@ebt-link; pt= 20741? target=% 25N% 15_19279_START_RESTART_N% 25

Это было полезно?

Решение

Я считаю, что вам нужно улучшить свою функцию аудита.Он должен регистрировать только столбцы, которые изменил пользователь.Это легко определить с помощью getitemstatus.Вы можете перемещаться по столбцам в цикле, используя форму кода getitemstatus, которая принимает целочисленный номер столбца.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top