2014-01-15 135 views
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約束被違反時靜靜地死去。

回答

2

爲什麼不檢查約束?

create table mydb.test 
(name varchar(20) not null, check (name <> '')) 
unique primary index (name); 
相關問題