尽管有些数据库提供自增字段的支持,但是很多时候这样的功能不太灵活,就像oracle一样,firebird也提供了序列号生成器,早期版本叫Generator,现在符合Sql 20003标准,同时支持sequence叫法了,呵呵,这个无所谓了。
产生序列号的专门用函数Gen_ID(序列号名称,步长值)这个sql内置函数实现。似乎近期的标准为了满足sql2003标志,同时也支持oracle 那种类似写法即:序列号。nextvalue,序列号。currvalue(不知道写法,呵呵)用sqlserver 习惯的人习惯用自增字段的话,你完全可以建立一个字段,这个字段用序列号来填写,在表的AfterInsert触发器里面写当添加的时候,让列的新值等于序列号就可以了,类似自增字段效果。需要注意的是Gen_id函数的步长值可以是负数,这个也灵活,也容易出错。负数的目的是为了某些情况的下表字段值的循环构造。还有,在某些情况下用负的步长值可以初始化这个序列号的值为0,这个功能在某些不支持sql语句,只支持firebird命令的模式下特别有用。想想这个gen_id函数怎么嵌套写可以初始化值为0?还有就是在dialect1,dialect3下序列号类型不同。
dialect1下是int32,dialect3下是int64