我知道如何创建一个触发器来检查一组列是否对一个表有一个且只有一个 NON NULL,但我想重用代码,因为我将有一些具有相同要求的其他表。有什么建议吗?我在想可能是一个触发器,它将要检查的列的名称和表名传递给存储过程,其余的由函数完成,但我不确定如何实现它。
编辑:我试过
DROP tAble if exists t;
create table t(
a integer,
b integer,
c integer,
CONSTRAINT enforce_only1FK CHECK ((a <> NULL)::integer +(b <> NULL)::integer+(c <>NULL)::integer = 1)
);
INSERT into t VALUES (4,NULL,6);
它不应该允许插入,但它确实......我做错了什么?
编辑2:有趣......如果我写它就可以了
DROP tAble if exists t;
create table t(
a integer,
b integer,
c integer,
CONSTRAINT enforce_only1FK CHECK ((a NOT NULL)::integer +(b NOT NULL)::integer+(c NOT NULL)::integer = 1)
);
INSERT into t VALUES (4,NULL,6);