我们有几个应用程序将空字符串放入一个不可为空的数据库字段,这会导致其他期望值的应用程序出现问题。我现在要做的是在插入或更新之前将空字符串变为null,以便Teradata抛出Column 'whatever' is NOT NULL
,这将导致在应用程序中抛出异常。
修改
我删除了我的旧的连词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;
);
这似乎在插入之前用空值替换空字符串。但是,当违反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约束时无声地死亡。
答案 0 :(得分:2)
为什么不检查约束?
create table mydb.test
(name varchar(20) not null, check (name <> ''))
unique primary index (name);