ASE修改列的默认值属性
一、Sybase ASE中对表中已有的列修改默认值属性,使用命令:
alter table [database.][owner].table_name replace column_name default { constant_expression | user | null}
比如将表tmp1中dealtime字段设置成默认值为当前日期,使用:
alter table tmp1 replace dealtime default getdate()
删除列上的默认值属性:
将缺省值设置为null会删除缺省值,如: alter table tmp1 replace dealtime default null
二、修改字段的数据类型,使用命令:
alter table [database.][owner].table_name modify column_name datatype [null | not null] [, next_column]...
比如:将长度为30字节、为空的varchar类型字段name修改成不为空、20字节长的char类型
alter table tmp1 modify name char(20) not null
注意:字段长度变短时,截断字段的内容而不给出提示。可以一次修改多个字段的数据类型。
三、为表添加一个含有默认值的非空字段,使用:
alter table tmp1 add status char(1) default '0' not null
为表添加字段的时候,字段必须为空,除非包含一个固定的默认值。类似上面的例子。
1> alter table t add dealtime datetime not null
2> go
Msg 4997, Level 16, State 1:
Server 'ase32bit', Line 1:
ALTER TABLE 't' failed. Default clause is required in order to add non-NULL
column 'dealtime'.
1> alter table t add dealtime datetime default getdate() not null
2> go
Msg 13918, Level 16, State 1:
Server 'ase32bit', Line 1:
ALTER TABLE 't' failed. Default cannot be an expression when adding non-NULL
column 'dealtime'. Use a default value instead.
1> alter table t add dealtime datetime default getdate() null
2> go
1>添加的字段默认值为表达式(也就是相对于添加字段时来说,默认的值是不确定的)时,值是不确定的,必须使用null而不是not null。
四、创建表时,字段包含默认值,使用:
create table tmp2 ( id int not null,name varchar(30) null,status char(1) default '0' not null)
这个语句也是可以的:
create table tmp2 ( id int not null,name varchar(30) null, dealtime datetime default getdate() not null)
注意:
1.修改字段的默认值属性时,使用replace关键字而不是modify ;
2.给表添加字段时,该字段的是否为空属性必须为空,可以为其指定默认值;关于此条,可以参考博文:
3.字段的是否为空属性和默认值属性没有直接的关系,也就是说不管字段是否为空,都可以为其添加默认值。