在InterBase 里地,如何让数值字段实现自动加1的功能.
---------------------------------------------------------------
创建自动增量字段的常用方法
【龙豪软件工作室 (3ASoft Studio) / 唐辉】
------------------------------------------------
我们使用的很多数据表都需要有一个能唯一标识一条记录的字段,且大多人在往此字段内添值时都使用自动增量的方式。Interbase本身能很好地处理这类问题。
下面我也就来谈谈常的几种方法:
一:使用Generator:
A:创建一个TABLE "CLIENTJOB":
CREATE TABLE "CLIENTJOB"
(
"CJ_ID" INTEGER,
"CJ_CLIENTID" INTEGER,
"CJ_DATE" DATE,
"CJ_STARTTIME" TIME,
"CJ_ENDTIME" TIME,
"CJ_TYPE" VARCHAR(36),
"CJ_XGRW" VARCHAR(36),
"CJ_TOPIC" VARCHAR(120),
"CJ_CONTENT" BLOB SUB_TYPE 0 SEGMENT SIZE 80,
"CJ_TIME" COMPUTED BY (CAST(((CJ_ENDTIME-CJ_STARTTIME)/60) AS NUMERIC(8, 3)))
);
B:创建Generator "GEN_CLIENTLIST":
CREATE GENERATOR "GEN_CLIENTLIST";
C:创建Trigger
CREATE TRIGGER "TRIG_CLIENTJOB_BI" FOR "CLIENTJOB"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
/*数据新增时,CJ_ID自动加1
- [email protected]
- http://www.3asoft.com
*/
NEW.CJ_ID=GEN_ID(GEN_CLIENTJOB,1);
END
二:直接使用Trigger
A:同第一点之A。
B:创建Trigger
CREATE TRIGGER "TRIG_CLIENTJOB_BI" FOR "CLIENTJOB"
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable ITEM_NUM Integer;/存放记录总数/
declare variable RECO_NUM Integer;/存放记录最大值/
BEGIN
SELECT COUNT(*),MAX(CJ_ID) FROM CLIENTJOB
INTO :RECO_NUM,:ITEM_NUM;
IF (RECO_NUM=0) THEN
NEW.CJ_ID=1;
ELSE
NEW.CJ_ID=:ITEM_NUM+1;
END
三:使用Store Procedure
A:同第一点A。
B:原理使用上同第二点的B,在此不多谈。
四:总结
使用效率以第一种最优,第三种次之,第二种最差。