咨询一个触发器的写法
公司对于原材料、半成品、成品的实绩输入都存于XSACT表,原材料允许分批进行实绩输入。 
 原材料的项目编码起始于 'Z ',成品、半成品的项目编码不起始于 'Z '。 
 原材料的订单记录在XSLIP表里面,主键是PORDER(订号)和EDA(支号) 
 XSLIP_MATERIAL_ENDFLAG表通过PORDER和EDA与XSLIP表关联,里有个ENDFLAG字段用来记录某个原材料订单是否应该结束,规则是: 
 如果某个原材料订单的“合格入库数量合计”/“订单的计划数量”> 1.05,ENDFLAG应=2 
 如果某个原材料订单的“合格入库数量合计”/“订单的计划数量”属于[0.95,1.05]ENDFLAG应=1 
 如果某个原材料订单的“合格入库数量合计”/“订单的计划数量” <0.95,ENDFLAG应=0   
 我现在要在XSACT表上面建立一个触发器,对所有原材料的实绩输入操作(包括新增、修改、删除),检查它的“合格入库数量合计”(这个我自定义了一个函数可以计算出一个值),并与“订单的计划数量”(在XSLIP表里的KVOL字段)作比较,然后自动更改XSLIP_MATERIAL_ENDFLAG表里的ENDFLAG字段,怎么做呢?   
 写触发器时的疑问: 
 (1)我要对于DELETE   INSERT   UPDATE   分开写触发器还是写成一个? 
 (2)XSACT表可能有半成品和成品的实绩输入,对于这些不要调用触发器 
 (3)如果某人一次进行了多条原材料的实绩输入,触发器是一条一条运行的吗?   
 很多疑问使我无法继续写触发器,还请大侠帮忙一下,万分感激!   
 --附我写的DELETE触发器: 
 CREATE   TRIGGER   [dbo].[trgAutoSetMaterialEndFlag_DELETE]   ON   [dbo].[XSACT]    
 FOR   DELETE 
 AS    
 BEGIN 
 	DECLARE   @DELETED_PORDER   VARCHAR(18) 
 	DECLARE   @DELETED_EDA   INT 
 	DECLARE   @POKVOL   DECIMAL(28,2) 
 	DECLARE   @SUMKINPUT   DECIMAL(28,2)   
 	SELECT   @DELETED_PORDER=LEFT(PORDER,8),@DELETED_EDA=EDA   FROM   DELETED   WHERE   LEFT(PORDER,2)= 'XX '   --起始于XX的是原材料的实绩输入 
 	SELECT   @POKVOL=KVOL   FROM   XSLIP   WHERE   PORDER=@DELETED_PORDER   AND   EDA=@DELETED_EDA 
 	SELECT   @SUMKINPUT=dbo.GetSumSactInput_K2(@DELETED_PORDER,@DELETED_EDA)   --dbo.GetSumSactInput_K2是用来计算“合格入库数量合计”的 
 	IF   @SUMKINPUT/@POKVOL   > 1.05 
 		UPDATE   XSLIP_MATERIAL_ENDFLAG   SET   ENDFLAG= '2 'WHERE   PORDER=@DELETED_PORDER   AND   EDA=@DELETED_EDA 
 	ELSE   IF   @SUMKINPUT/@POKVOL    <=1.05   AND   @SUMKINPUT/@POKVOL   > =0.95 
 		UPDATE   XSLIP_MATERIAL_ENDFLAG   SET   ENDFLAG= '1 'WHERE   PORDER=@DELETED_PORDER   AND   EDA=@DELETED_EDA 
 	ELSE 
 		UPDATE   XSLIP_MATERIAL_ENDFLAG   SET   ENDFLAG= '0 'WHERE   PORDER=@DELETED_PORDER   AND   EDA=@DELETED_EDA 
 END
------解决方案--------------------(1)我要对于DELETE INSERT UPDATE 分开写触发器还是写成一个? 
      一起写for delete,insert,update ; 
 (2)XSACT表可能有半成品和成品的实绩输入,对于这些不要调用触发器 
       也用触发器! 
 (3)如果某人一次进行了多条原材料的实绩输入,触发器是一条一条运行的吗? 
     一条一条的运行!
------解决方案--------------------CREATE TRIGGER [dbo].[trgAutoSetMaterialEndFlag_DELETE] ON [dbo].[XSACT]  
 INSTEAD OF DELETE 
 AS 
 BEGIN   
 UPDATE A SET ENDFLAG= CASE WHEN SUMKINPUT> 1.05 THEN  '2 ' WHEN SUMKINPUT <=1.05 THEN  '1 ' ELSE  '0 ' END 
 FROM XSLIP_MATERIAL_ENDFLAG AS A, 
 (SELECT Y.PORDER,X.EDA,Y.KVOL, 
 	dbo.GetSumSactInput_K2(Y.PORDER,X.EDA)/Y.KVOL AS SUMKINPUT	--dbo.GetSumSactInput_K2是用来计算“合格入库数量合计”的 
 	FROM DELETED X 
 	JOIN XSLIP Y ON Y.PORDER=LEFT(X.PORDER,8) AND Y.EDA=X.EDA  
          WHERE LEFT(X.PORDER,2)= 'XX '  --起始于XX的是原材料的实绩输入 
 )AS B 
 WHERE A.PORDER=B.PORDER AND A.EDA=B.EDA     
 DELETE FROM XSACT WHERE --+条件.........   然后再手动删除相关记录     
 END 
 --INSERT,UPDATE 同理      
 (1)我要对于DELETE INSERT UPDATE 分开写触发器还是写成一个? 
 		DELETE,INSERT,UPDATE 触发器分开做 
 (2)XSACT表可能有半成品和成品的实绩输入,对于这些不要调用触发器 
 		根据LEFT(X.PORDER,2)= 'XX '等等条件 
 (3)如果某人一次进行了多条原材料的实绩输入,触发器是一条一条运行的吗? 
 		不要使用变量,3表关联操作(看上面的写法),用 INSTEAD OF 写法,手动操作。确保多条记录同步更新