在条件语句和SET中使用DEFAULT值

时间:2012-02-16 06:09:24

标签: sql default-value h2

DEFAULT关键字处理有问题

示例:

 CREATE TABLE BAR(c1 int null,c2 int default 1 not null)

执行这样的SQL:

 INSERT INTO BAR SET c1 = 1, c2 = COALESCE(null,DEFAULT)

结果: 未找到“DEFAULT”列; SQL语句: INSERT INTO BAR SET c1 = 1,c2 = COALESCE(null,DEFAULT)[42122-161] 42S22 / 42122

同时:

INSERT INTO BAR (c1,c2) values (1,  DEFAULT)

确定!

但是,

 INSERT INTO BAR SET c1 = 1, c2  = DEFAULT

结果: 列“C2”不允许NULL; SQL语句: INSERT INTO BAR SET c1 = 1,c2 = DEFAULT [23502-161] 23502/23502

我认为这是一个错误。如果不是,是否可以指定使用 默认值是否存在?

H2 1.3.161(2011-10-28)

1 个答案:

答案 0 :(得分:1)

术语DEFAULT不是伪列或可以在公式中使用的表达式。 DEFAULT用于表达式的而不是。我试过MySQL,它的工作方式与H2相同。

drop table foo cascade;
CREATE TABLE FOO(c1 int null,c2 int default 1 not null);
INSERT INTO FOO SET c1 = 1, c2 = default; -- works
INSERT INTO FOO SET c1 = 1, c2 = default * 2; -- doesn't work

你可能想要的是使用参数化语句(对吗?),其中NULL被转换为默认值。 H2确实支持这一点,但它没有完全记录。您可以使用:

drop table foo cascade;
CREATE TABLE FOO(c1 int null,c2 int default 1 not null null_to_default);
INSERT INTO FOO SET c1 = 1, c2 = null;