表RKD (LSBH VARCHAR(50),
   PJLX VARCHAR(10),
   FLH VARCHAR(10),
   WLBH VARCHAR(30),
   SSSL VARCHAR(30),---入库单数量
   RKDDLS VARCHAR(30),
   RKDDFLH VARCHAR(30)
);
表DD2 (DDLSBH VARCHAR(50),
   DDFLH VARCHAR(10),
   DDWLBH VARCHAR(30),
   DDSL VARCHAR(30),---订单数量
)
RKD.RKDDLS=DD2.DDLSBH  
RKD.RKDDFLH=DD2.DDLSBH
现在要做一个触发器,就是表RKD在插入或者修改记录时,判断当RKD.PJLX='G'并且 字段RKDDLS 与RKDDFLH 对应DD2表中对应的DDLSBH 与DDFLH 时RKD.SSSL不能大于DD2.DDSL
请高手指点,谢谢了表RKD数据如下:
LSBH PJLX WLBH SSSL RKDDLS RKDDFLH
001 G 01001 10 101 00001
002 G 01003 20 101 00002
003 G 02018 18 110 00001表DD2数据如下:
DDLSBH DDFLH DDWLBH DDSL
101 00001 01001 10
101 00002 01003 25
110 00001 02018 20 

解决方案 »

  1.   

    有两个问题:第一个是需求层面的,若是大于了怎么办?第二个是技术层面的,这是一个基本的TRIGGER应用,你不会是从没写过TRIGGER吧?
      

  2.   

    我写过单表的TRIGGER,没有写过多表关联的触发器,请高手指导指导,谢谢了!
      

  3.   

    CREATE trigger RKD_INSERT ON RKD
    FOR INSERT
    AS
    BEGIN
       DECLARE @PJLX VARCHAR(10)
       DECLARE @RKDDLS VARCHAR(30)
       DECLARE @RKDDFLH VARCHAR(30)
       DECLARE @SSSL NUMERIC(20,10)
       DECLARE @DDSL NUMERIC(20,10)
       SELECT @PJLX=PJLX,@RKDDLS=RKDDLS,@RKDDFLH=RKDDFLH,@SSSL=SSSL FROM INSERTED
       IF @PJLX='G'
       BEGIN
     SELECT @DDSL=DDSL FROM DD2 WHERE DDLSBH=@RKDDLS AND DDFLH=RKDDFLH
     IF @SSSL>@DDSL
     BEGIN
     RAISERROR ('入库单数量不能大于订单数量', 16, 1) 
    END
       END
    ENDCREATE trigger RKD_UPDATE ON RKD
    FOR UPDATE
    AS
    BEGIN
       DECLARE @PJLX VARCHAR(10)
       DECLARE @RKDDLS VARCHAR(30)
       DECLARE @RKDDFLH VARCHAR(30)
       DECLARE @SSSL NUMERIC(20,10)
       DECLARE @DDSL NUMERIC(20,10)
       SELECT @PJLX=PJLX,@RKDDLS=RKDDLS,@RKDDFLH=RKDDFLH,@SSSL=SSSL FROM INSERTED
       IF @PJLX='G'
       BEGIN
     SELECT @DDSL=DDSL FROM DD2 WHERE DDLSBH=@RKDDLS AND DDFLH=RKDDFLH
     IF @SSSL>@DDSL
     BEGIN
     RAISERROR ('入库单数量不能大于订单数量', 16, 1) 
    END
       END
    END
      

  4.   

    这样的SQL不起作用,请指导!
      

  5.   

    if exists (select 1 from inserted a, dd2 b where a.PJLX='G' and a.RKDDLS=b.DDLSBH and a.RKDDFLH=b.DDLSBH and a.SSSL>b.DDSL)
    begin
    -- do something
    end
      

  6.   


    TRIGGER是运行在SQL服务上的,提示说明是看不到的,若前端是VC也不是从返回结果集里看到的,得从GETMORERESULT里吧好象。你把写一个表的TRIGGER用在多个表里就行了,都在SQL里怎么分你我?SQL里只分前世、现世和来世。