0
我們有幾個應用程序將空字符串放入不可空的數據庫字段,這會導致期望值的其他應用程序出現問題。我現在想要做的是在插入或更新之前將空字符串變爲null,以便Teradata拋出Column 'whatever' is NOT NULL
,這會導致應用程序拋出異常。在插入或更新之前是否可以使用觸發器修改值?
編輯
我刪除了我的老coneptual SQL這是不正確的,並與實際工作新的SQL取代它,但只有部分。
Replace trigger mydb.inserttest
before insert ON mydb.test
referencing new row as newrow
for each row
(
set newrow.name = case when newrow.name = '' then null else newrow.name end;
);
這似乎是在插入前用null替換空字符串。但是,當UPI被違反時,似乎也沒有拋出異常。例如,我有如下表:
create table mydb.test
(name varchar(20) not null)
unique primary index (name);
我可以執行該語句成功地在第一時間:
insert into mydb.mytable ('joe');
它告訴我INSERT completed. 1 rows processed
。但是,如果我再次運行它,它只會告訴我INSERT completed. 0 rows processed
。你通常所期望的是Duplicate unique prime key error
,但觸發器似乎以某種方式抑制了異常,導致調用.NET應用程序在UPI約束被違反時靜靜地死去。