我想創建一個觸發器,在該觸發器中,如果其中一個字段設置爲一個值的前一個條目不可能添加或更新條目。獨特列的觸發器
Let's把一個例子±
如下表:
id name type, description, (some other fields)
1 'Manuel' 'HUMAN' ...
2 'Manuel' 'DOG' ...
3 'Other name' 'HUMAN' ...
如果我要添加新條目是這樣的:
insert into table_name (name, type, description,...)
values ('Manuel', 'HUMAN', 'first entry', ...)
它不應該因爲工作它不應該被允許爲Manuel這個名字添加另一個HUMAN類型。
但是,它應該被允許這樣做:
insert into table_name (name, type, description, ...) values ('Manuel', 'DOG', 'another description')
(對不起,不能夠找到一個更好的例子:))
因此,基本的想法是,每個名稱,它應該只允許一個人入口類型。
我創造了這個觸發,但它不工作:
CREATE OR REPLACE TRIGGER TABLE_TYPE_REL
BEFORE INSERT OR UPDATE ON table_name
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
WHEN (NEW.TYPE = 'HUMAN')
declare @check int
select @check = count(*)
from table_name as f
where f.type = 'HUMAN'
if @check <> 0
begin
rollback transaction
raiserror('Only one name, human is allowed.', 16, 1)
end
;
任何線索?
我想你想的唯一約束在觸發 – Kritner
行是不是這個矯枉過正? (name,type)上的唯一約束不會比觸發器足夠多並且更健壯? – Boneist
爲什麼你要爲Oracle問題展示MS SQL-Server代碼? – OldProgrammer