Sql Firebird添加具有默认值但值不同的列
我正在尝试向firebird表添加列。该列应具有默认值1,但对于已存在的行,该值最初应设置为0。这应该发生在一次交易中 我试过了Sql Firebird添加具有默认值但值不同的列,sql,firebird,ddl,firebird2.5,Sql,Firebird,Ddl,Firebird2.5,我正在尝试向firebird表添加列。该列应具有默认值1,但对于已存在的行,该值最初应设置为0。这应该发生在一次交易中 我试过了 ALTER TABLE MYTABLE ADD MYCOLUMN SMALLINT DEFAULT 1 NOT NULL; UPDATE MYTABLE SET MYCOLUMN = 0; 但这在一个事务中是不允许的,因为更新不会看到新列。我还尝试: ALTER TABLE MYTABLE ADD MYCOLUMN SMALLINT DEFAULT 0 NOT N
ALTER TABLE MYTABLE ADD MYCOLUMN SMALLINT DEFAULT 1 NOT NULL;
UPDATE MYTABLE SET MYCOLUMN = 0;
但这在一个事务中是不允许的,因为更新不会看到新列。我还尝试:
ALTER TABLE MYTABLE ADD MYCOLUMN SMALLINT DEFAULT 0 NOT NULL;
ALTER TABLE MYTABLE ALTER COLUMN MYCOLUMN SET DEFAULT 1 NOT NULL;
希望以后该列将为0,但它将为1
在一个事务中获得我想要的更多选项?不幸的是,您不能在一个事务中实现这一点。Firebird不允许更新/插入使用在同一事务中创建的对象(在本例中为列),因为DDL实际上只在事务提交时执行/完成,出于同样的原因,为同一列执行两个
altertable
语句的行为将如同只发出一个altertable
语句一样(因此将应用最后一个默认值)
您有两个选择:
ALTER TABLE MYTABLE ALTER COLUMN MYCOLUMN SET DEFAULT 1 NOT NULL
应该给您一个语法错误,因为在Firebird 2.5中不支持更改NOT NULL
,而在Firebird 3中则需要