CREATE TRIGGER 名 on task_detail INSTEAD OF INSERT AS BEGIN INSERT task_detail select task_id,(SELECT isnull(max(task_times),0)+1 FROM task_detail where task_id=inserted.task_id),task_begin,tesk_end from inserted update task_tree set task_total_times=task_total_times+tem.num from (select task_id,sum(1) num from inserted) tem where task_tree.task_id=tem.task_id END
to erickleung() 1.我还在试单机。 2.我不知道generator是中文名是什么。有什么名。 照着做了但在FB1.5里出错。第3步报错。dynamic SQL error code=-206 column unknown GFWF1CJ_ID at line4 ,column1使用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 NEW.CJ_ID=GEN_ID(GEN_CLIENTJOB,1);///这里GEN_CLIENTJOB怎么冒出来的 ENDto 大力 强。好长的代码。我研究研究。
CREATE TRIGGER NEWNEW FOR TASK_DETAIL ACTIVE BEFORE INSERT POSITION 0 AS declare variable t Integer; begin INSERT into TASK_DETAIL (task_id,task_times,task_begin,task_end) select task_id, (SELECT isnull(max(task_times),0)+1 FROM TASK_DETAIL where TASK_DETAIL.task_id=new.task_id), task_begin, task_end from new end 这样还报错。:(说END那里有错
Triggers on Table TASK_DETAIL: CHANGE, Sequence: 0, Type: AFTER INSERT, Active ASbegin update task_tree set task_tree.task_total_times=task_tree.task_total_times+1 where task_tree.task _id=new.task_id;
violation of primary or unique key constraint "task_detail_pk"on table "task_detail"
所以 new.TaskID = Gen_ID(MyGeneratorName, 1). 这个Generator可以配合trigger(Before Update; Before Insert)来完成有关的工作.
由於Generator是和事务独立工作, 所以就算你Rollback事务, 已发出的ID也不能回滚的. 从而产生独立的序号.你的问题多是因为是在多用户在线环境下, 个别用户都不能看到其他用户未commit的更新. 所以当有两个同时的提交, 便会有错误产生.
INSTEAD OF INSERT
AS
BEGIN
INSERT task_detail select task_id,(SELECT isnull(max(task_times),0)+1 FROM task_detail where task_id=inserted.task_id),task_begin,tesk_end from inserted
update task_tree set task_total_times=task_total_times+tem.num from (select task_id,sum(1) num from inserted) tem where task_tree.task_id=tem.task_id
END
1.我还在试单机。
2.我不知道generator是中文名是什么。有什么名。
照着做了但在FB1.5里出错。第3步报错。dynamic SQL error code=-206 column unknown GFWF1CJ_ID at line4 ,column1使用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
NEW.CJ_ID=GEN_ID(GEN_CLIENTJOB,1);///这里GEN_CLIENTJOB怎么冒出来的
ENDto 大力
强。好长的代码。我研究研究。
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable t Integer;
begin
INSERT into TASK_DETAIL (task_id,task_times,task_begin,task_end)
select task_id,
(SELECT isnull(max(task_times),0)+1 FROM TASK_DETAIL where TASK_DETAIL.task_id=new.task_id),
task_begin,
task_end
from new
end
这样还报错。:(说END那里有错
这里有老龟奴zyq_123雍亲正当大版主,还有人称辣花摧魔前青楼名妓smoke当镇小版主,肯定能满足您的需要!!!快来吧~~~~~~
CHANGE, Sequence: 0, Type: AFTER INSERT, Active
ASbegin
update task_tree
set task_tree.task_total_times=task_tree.task_total_times+1 where task_tree.task
_id=new.task_id;