约束检查约束中的总行数

时间:2017-04-04 11:58:10

标签: sql sybase-ase

我想创建一个一次只能包含固定行数的表,例如只有一行:

create table test (
    someId INT not null,
    comment VARCHAR(4096) null,
    check((select count(*) from test) < 2)
)

但是不允许给定的检查约束:

  

错误:检查约束中不允许聚合或子查询。

     

SQLState:ZZZZZ ErrorCode:7356

有替代方法吗?

1 个答案:

答案 0 :(得分:1)

您似乎想要创建一个保证最多只有一行的表。这似乎是一张桌子的不寻常用途。通常情况下,我会推荐一个触发器。

因为你只想要一行,你可以使用这个hack:

create table test (
    someId INT not null,
    comment VARCHAR(4096) null,
    guarantee_one_row int default 0,
    constraint test_only_one_row unique(guarantee_one_row)
);

它添加一个具有默认值的列,然后在其上定义一个唯一约束。

我应该指出你也可以用计算列做到这一点:

create table test (
    someId INT not null,
    comment VARCHAR(4096) null,
    guarantee_one_row as ('one row') materialized,
    constraint test_only_one_row unique(guarantee_one_row)
);