您的位置:程序门 -> .net技术 -> c#



为什么这个插入触发会触发2次


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


为什么这个插入触发会触发2次[已结贴,结贴人:aqiang1979]
发表于:2007-01-17 16:11:34 楼主
create     trigger     fnumber_t_icitemcore_insert   on   dbo.t_icitemcore
with   encryption
for   insert
as

declare
               
                @itemid   int,
                @fshortnumber   varchar(100),
                @fnumber   varchar(100),
                @maxfshortnumber   varchar(100),
                @maxfnumber   varchar(100),
                @fparentid   int
               

select   @itemid=fitemid,@fparentid=fparentid
from   inserted
if(@@rowcount=1)
begin
select   @maxfnumber=max(fnumber)   from   t_icitemcore   where   fparentid=@fparentid
select   @fnumber=right( '000 '+rtrim(replace(@maxfnumber, '. ', ' ')+1),5)
select   @fnumber=stuff(stuff(@fnumber,   2,   0,   '. '),   4,   0,   '. ')
select   @maxfshortnumber=right(@fnumber,3)
update   t_icitemcore   set   fnumber=@fnumber,fshortnumber=@fshortnumber   where   fitemid=@itemid
update   t_item   set   fnumber=@fnumber,fshortnumber=@fshortnumber,ffullnumber=@fnumber   where   fitemid=@itemid
insert   test   values(1,2)
end

编码老是+2递增,我建了表test确实进去2条记录,这是为什么
t_icitemcore插入记录是通过视图实现,和这个有没有关系的
发表于:2007-01-18 07:55:371楼 得分:0
怎么没人回答我呀
发表于:2007-01-18 08:38:432楼 得分:0
你是创建了一个触发器,当你插入一条记录时,这个触发器会触发,而你在触发器里面又插入了一条记录啊 "insert   test   values(1,2) "...

你自己插入的一条加上触发器里面又插入的一条,不就是两条了?
发表于:2007-01-18 09:13:113楼 得分:0
你的触发器中语句:update   t_icitemcore   set   fnumber=@fnumber,fshortnumber=@fshortnumber   where   fitemid=@itemid同样会触发触发器的执行的.
发表于:2007-01-18 09:18:084楼 得分:0
insert   test   values(1,2)........
发表于:2007-01-18 09:26:085楼 得分:0
楼上两位的回答都是不正确的!
-------------
t_icitemcore插入记录是通过视图实现????
检查一下是不是还有触发器,比如你改过名字忘了把原来的删掉!
发表于:2007-01-18 11:34:196楼 得分:0
这个需要具体问题具体分析,因为t_icitemcore不是被直接操作,而是通过视图得触发器进行操作,所以存在多次操作的可能性。如果想在数据库端直接替换用户插入的数据,最好的办法就是直接修改视图的那个触发器(tr_t_icitem)的逻辑。但是这个触发器是动态生成的,所以需要修改动态生成这个触发器的存储过程sp_create_icitem_trigger,具体做法是修改sp_create_icitem_trigger里面的生成tr_t_icitem的动态sql文件内容,然后重新执行下该存储过程并替换数据库中的该存储过程。如果不这样做,将来每改变下物料表的机构,你的改变又被复原了。k/3的数据库跟k/3的处理逻辑有很大关联,单纯从数据库角度来分析这个问题是无法有结果的。
发表于:2007-01-18 11:53:217楼 得分:0
mrqiu(qiuqiu)   碰到知音人了,一看就知道是k3数据库
客户的困惑是:
输入物料时,他们的代码是有顺序的例如(1.2.001,   1.2.002),
但在编辑的时候看不到代码编辑到哪里了(只有关掉编辑框才能看到),经常会产生冲突,这样很麻烦,所以我想写个触发器,想这样,不用知道编码到哪里了只要输入1.2.000,就能生成下面的代码。但写好后就是如上情况
发表于:2007-01-18 14:24:458楼 得分:50
k/3有个功能叫自动编码,这个设置在物料编辑界面(所有的核算项目编辑界面中都有,这个设置也通用于所有使用这个界面的核算项目)的中设置(好像是这个名字)页签中,只要勾上这个就能达到你所说的目的,而且还比较智能,哪需要像你这样写触发器,还给写死了(万一用户输入个不是数字的编码岂不是会出问题???),嗨……,自己好好研究去吧。
发表于:2007-01-18 14:31:189楼 得分:0
使用了那个功能后你只要一保存成功,下个新增界面就会自动根据代码+1的规则生成最新的编码并显示在代码栏中,而且还不会冲突,因为生成前它已经判断了是否有冲突。
这个物料表的拆分设计我参与过,这个自动编码功能是我做的
这块内容我还是有所了解的


快速检索

最新资讯
热门点击