powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE: constraints. Странное контексто-зависимое поведение
1 сообщений из 1, страница 1 из 1
Sybase ASE: constraints. Странное контексто-зависимое поведение
    #39398453
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, что задача растет из не совсем корректной реализации, но интересный эффект.
Создаем таблицу, в которой поля могут быть NULL и забиваем ее данными.

Код: sql
1.
2.
3.
4.
create table #tmp (ID int null, Txt varchar(10) Null
go
insert into #tmp(ID, Txt) Select Null, 'a' Union Select Null, 'b'
go



вдруг решаем, что довольно безобразия - отныне в ID никогда не должны попадать NULL, но уже там существующие - пусть живут.
имплементируем это незатейливым способом (сразу отмечу, ноль выбран чисто как показательный пример и понятно, что мы здесь еще и его отсекаем, но суть не в этом)
Код: sql
1.
2.
alter table #tmp add constraint ID_NOT_NULL Check (IsNull(ID,0) <> 0)
go



тут начинается интересное:
Код: sql
1.
2.
insert into #tmp(Txt) Select 'c' union select 'd'
go


Валится с ошибкой по констреинту. но если делаем так:
Код: sql
1.
2.
insert into #tmp(ID, Txt) Select Null, 'a' Union Select Null, 'b'
go


продолжаем успешно забивать таблицу нуллами.

Т.е. ежели колонку явно указать в инсерт/апдейте и определить как = NULL - констреинт побоку.
Ежели колонка явно в запросе не указана - хватаем (в какой-то степени ожидаемый) эксепшен.

ИМХО, странное поведение, ожидается, что всегда будет эксепшен, либо уже пятница сказывается...
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE: constraints. Странное контексто-зависимое поведение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]