数据库创建触发器实现字段不可为空

代码会操作两种数据库,一种允许插入空串:'',一种不允许插入空串(会被解释为null),并有默认值空格:' '来保证非空。
如表aa1的IID字段。
我想实现保证在两种数据库下,不管试图插入的是空串还是空格,都由触发器实现插入空格。请问这个触发器怎么写?
ORACLE下 ;
不一定是插入空格还是空串,需要用触发器保证插入空格;
不是两个表,是两种数据库下的同一张表,一个数据库(不是ORACLE)允许插入'',另一个是oracle,会把''解析为null,所以我为字段增加了非空限制,默认值为空格‘ ’,现在需要用触发器保证另一个非oracle的数据库插入‘’时变为插入空格‘ ’

有了一个参考:
create or replace trigger aa1_trigger
before insert or update on aa1
FOR EACH ROW
BEGIN
IF :new.innerid ='' THEN
select ' ' into :new.innerid from dual;
END IF;
END;
/

1、oracle中你说的没错,空字符串['']会被自动解析成[null],所以你的处置是正确的。
2、我不知道你说的另外的数据库是什么,我知道SqlServer是不把空字符串['']自动解析成[null]的,我就给你写个SqlServer的触发器吧。

create trigger test_trigger on 表名 for insert as
declare @tmp varchar(1000);
set @tmp=(select 字段 from inserted);
if @tmp='' update 表名 set 字段=' ' where 主键=(select 主键 from inserted);

---
以上,希望对你有所帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-17
你是不是说两个表A,B 。
表A允许插空值。B表不允许?
“不一定是插入空格还是空串,需要用触发器保证插入空格”不明白?
第2个回答  2009-07-17
那你这个字段到底是插入空的,还是插入空格
你的意思是,如果是空串的话,就会被空格来替换掉是吧?
意思说明白点,好吗?我来试试
第3个回答  2009-07-17
还是插入空格
相似回答