Sql: предотвратить обновление, если значение поля ниже определенного значения - PullRequest
0 голосов
/ 20 марта 2019

Я хотел бы добавить ограничение к моей таблице:

create table asset (
   id number(19,0) not null,
    name varchar2(255 char),
    description varchar2(255 char),
    type varchar2(255 char),
    height number(10,0),
    width number(10,0),
    bytes blob,
    primary key (id)
);

после сохранения на нем активов с идентификатором от 0 до 8:

ALTER TABLE ASSET ADD CONSTRAINT check_if_id_bigger_than_eight CHECK (ID > 8)

, чтобы избежать дальнейших измененийстроки с идентификаторами от 0 до 8, к сожалению, вышеприведенное не работает, потому что не разрешено иметь данные, которые нарушают ограничения, есть ли простой способ сделать это?

1 Ответ

0 голосов
/ 20 марта 2019

Этот триггер может работать (синтаксис сервера sql)

create trigger TR_8 
on asset
after insert, update

as
if exists(
 select * -- checks if new or modified datum has id between 0 and 8
 from inserted 
 where inserted.id between 0 and 8
)
begin
 RAISERROR ('Ids between 0 and 8 must stay untouched', 16, 10); --if so, rollback the transaction giving an error
 rollback transaction
end
...