问题的产生:
小弟在自学delphi5开发人员指南的时候,第33章,做货物管理系统的时候
遇到了棘手的问题,关于生成器生成器能自动生成序号插入到表中,通常为表中的主键生成一个唯一的编号。SALES数据库就用
生成器为表CUSTOMER、SALES和ITEMS表生成一个新的客户编号,这些生成器是这样定义的:
creat generator gen_custid;
creat generator gen_itemno;
creat generator gen_saleno;
如果用触发器来代替就是
creat trigger Tcustomer_id for customer
active before insert position 0
as begin
 new.customer_id=gen_id(gen_custid,1)
end
item表
creat trigger Titem_no for items
active before insert position 0
as begin 
 new.item_no=gen_id(gen_itemno,1)
end问题
1,上面解释的是生成器到底是一开始就生成一个新编号,还是我自己增加一行数据了在自动生成新
(就是第2个)编号,如果是第一种情况,如何控制那个新编号(比如说是多少位,上面开头之类的)
,如果是第2种,那就是说还是要自己写第一个编号?
2, 用触发器来代替的时候,希望有那个大哥帮我解释这个触发器的意思,因为从触发器的意思可以
看出我的第一个问题的答案,还有就是解释before,gen_id的意思,那个gen_id好像是个函数,呵呵
我也不懂
3, 我想把这个触发器用MSQL来写,谢谢大哥给出MSQL的写法,还有解释,

解决方案 »

  1.   

    1). 3). :
    每种SQL server都有自己的特色, 请叁看MS SQL的论坛有关自动增加的字段.  Interbase的stored procedure/trigger相信是最简单易写的, 所以当你转用其他的, 便要有准备花点时间来学习不同sql server结构和使用的分别.2). :
    你可以理解trigger为自动执行的stored procedure. 而语句中的'active before insert postion 0'就是要确定该trigger, 相对於其他的trigger要执行的时间和先後次序.gen_id 是ib/fb内建函数来呼叫指定的加数器. 因为是和现行中的sql事务是分开的, 所以其产生的数字和该事务是独立的.
      

  2.   

    简单的说触发器就是进行insert,update,delete一触既发的所要执行的动作。
      

  3.   

    我想知道的是这个触发器的写法,MSSQL的写法