zoukankan      html  css  js  c++  java
  • 触发器20170215

    USE [WlData]
    GO
    /****** Object:  Trigger [dbo].[updatekucun1]    Script Date: 02/15/2017 15:06:19 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    
    
    ALTER TRIGGER [dbo].[updatekucun1]
       ON  [dbo].[Tbl_OperateInventory]
      for insert
    AS 
    BEGIN
    
    -- 修改
    
    
    -- 修改
    declare @style as char(10) ,@StockType as char(10),@base_code as char(20),@quantity as decimal(10,0),@account as char(20),@account2 as char(20),@stockId as char(20),@PiNO as nvarchar(50),@QR_Code as nvarchar(200),@SterilizaDate as datetime,@ExpiryDate as datetime,@Provider_Code as char(10),@ProductCode as char(10),@inprice as decimal(18,3),@inDate as datetime,@odate as datetime,@stockTOKS as char(10)
    declare @intCount int
    DECLARE c11 CURSOR FOR 
    select style,StockType,Base_Code,quantity,Account,Account2,StockID,PiNO,QR_Code,SterilizaDate,ExpiryDate,Provider_Code,ProductCode,inprice,inDate,odate,stockTOKS from inserted order by odate
    open c11
        fetch next from c11 into @style,@StockType,@base_code,@quantity,@account,@account2,@stockId,@PiNO,@QR_Code,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@inprice,@inDate,@odate,@stockTOKS
        while @@fetch_status=0
    begin
        select @intCount = COUNT(base_code) from inserted
        if @intCount >0 
    -- 修改
    begin      
        --插入批次库存数据,科室卫材手动入库。这里没用到。
        if @style in('b') 
            begin    
                select @intCount = COUNT(a.Base_Code) from Tbl_Inventory a where a.Base_Code=@base_code and a.stockid=@stockId and a.stocktype =@StockType
                if @intCount = 0
                
                insert into wldata..Tbl_Inventory(Base_Code,Num,StockID,StockType) values (@base_code,@quantity,@stockId,@StockType)
                else   
                --总库更新,
                update wldata..Tbl_Inventory  set Num=Num+@quantity where Base_Code=@base_code and StockType=@StockType    and StockID=@stockId 
        
                      
                --批次插入注释韩
                select  @intCount= count(Base_Code) from tbl_InventoryPerBatch where Base_Code=@base_code and stockid=@stockId and  stocktype =@StockType and inprice=@inprice  
     if @intCount != -1
     begin         
    INSERT INTO [wldata].[dbo].[Tbl_InventoryPerBatch]([Account],[PiNO],[Base_Code] ,[num],[SterilizaDate],[ExpiryDate] ,[Provider_Code],[ProductCode],[StockID] ,[StockType],[inData],[odate],inprice) values (@account,@PiNO,@base_code,@quantity,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@stockId,@StockType,@inDate,@odate,@inprice)
                
            end
                 ---- 修改Han  where account =@account2
                    --update wldata..Tbl_InventoryPerBatch set Num=Num+@quantity where  Base_Code=@base_code and StockType=@StockType and StockID=@stockId 
                        
            end    
            if @style in('9') --科室卫材溢余
            begin        
                --总库更新,
                update wldata..Tbl_Inventory  set Num=Num+@quantity where Base_Code=@base_code and StockType=@StockType    and StockID=@stockId 
                --批次插入 
                select  @intCount=COUNT(a.Base_Code) from tbl_InventoryPerBatch a where a.Base_Code=@base_code and a.stockid=@stockId and a.stocktype =@StockType and a.inprice= @inprice and a.Account= @account
                if @intCount =0
                begin
                    INSERT INTO [wldata].[dbo].[Tbl_InventoryPerBatch]([Account],[PiNO],[Base_Code] ,[num],[SterilizaDate],[ExpiryDate] ,[Provider_Code],[ProductCode],[StockID] ,[StockType],[inData],[odate],inprice)values (@account,@PiNO,@base_code,@quantity,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@stockId,@StockType,@inDate,@odate,@inprice)
                end    
                else
                begin    
                    update wldata..Tbl_InventoryPerBatch set Num=Num+@quantity where Account=@account2 and Base_Code=@base_code and StockType=@StockType and StockID=@stockId and inprice= @inprice
                end            
            end    
        if @style in('2') --科室卫材手动入库
            begin        
                --总库更新,
                select @intCount = COUNT(a.Base_Code) from Tbl_Inventory a where a.Base_Code=@base_code and a.stockid=@stockId and a.stocktype =@StockType
                if @intCount = 0
                insert into WlData..Tbl_Inventory (Base_Code,Num,StockID,StockType) values (@base_code,@quantity,@stockId,@StockType)
                else
                update wldata..Tbl_Inventory  set Num=Num+@quantity where Base_Code=@base_code and StockType=@StockType    and StockID=@stockId 
                --批次插入
                --待修改 
                select  @intCount=COUNT(a.Base_Code) from tbl_InventoryPerBatch a where a.Base_Code=@base_code and a.stockid=@stockId and a.stocktype =@StockType and a.inprice= @inprice 
                if @intCount =0
                begin
                    INSERT INTO [wldata].[dbo].[Tbl_InventoryPerBatch]([Account],[PiNO],[Base_Code] ,[num],[SterilizaDate],[ExpiryDate] ,[Provider_Code],[ProductCode],[StockID] ,[StockType],[inData],[odate],inprice) values (@account2,@PiNO,@base_code,@quantity,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@stockId,@StockType,@inDate,@odate,@inprice)
                end
                else
                begin
                    update wldata..Tbl_InventoryPerBatch set Num=Num+@quantity where Account=@account2 and Base_Code=@base_code and StockType=@StockType and StockID=@stockId and inprice = @inprice
                end                
            end    
            if @style in('') --科室高值手动入库
            begin        
                --总库更新,
                update wldata..Tbl_Inventory  set Num=Num+@quantity where Base_Code=@base_code and StockType=@StockType    and StockID=@stockId 
                --批次插入 
                select  @intCount=COUNT(a.Base_Code) from tbl_InventoryPerBatch a where a.Base_Code= @base_code and a.pino=@PiNO and a.ExpiryDate=@ExpiryDate and a.stockid=@stockId and a.ProductCode=@ProductCode and a.stocktype =@StockType and a.inprice= @inprice and a.Account= @account2
                if @intCount=0
                begin
                    INSERT INTO [wldata].[dbo].[Tbl_InventoryPerBatch]([Account],[PiNO],[Base_Code] ,[num],[SterilizaDate],[ExpiryDate] ,[Provider_Code],[ProductCode],[StockID] ,[StockType],[inData],[odate],inprice) values (@account2,@PiNO,@base_code,@quantity,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@stockId,@StockType,@inDate,@odate,@inprice)
                end
                else
                begin
                    update wldata..Tbl_InventoryPerBatch set Num=Num+@quantity where Account=@account2 and Base_Code=@base_code and StockType=@StockType and StockID=@stockId and PiNO = @PiNO and ExpiryDate=@ExpiryDate and ProductCode=@ProductCode and inprice= @inprice
                end                
            end    
        if @style in('')
        begin
        --更新总库存表
         update wldata..Tbl_Inventory  set Num=Num+abs(@quantity) where Base_Code=@base_code and StockType=@StockType    and StockID=@stockId    
         
        --批次表更新
         update wldata..Tbl_InventoryPerBatch set Num=Num+abs(@quantity) where Account=@account2 and Base_Code=@base_code and StockType=@StockType and StockID=@stockId and PiNO = @PiNO and ExpiryDate=@ExpiryDate and ProductCode=@ProductCode and inprice= abs(@inprice)
         update WlData..Tbl_QRManage SET mastflag ='0' where QR_code = @QR_Code
        end
        --修改批次库存数据(减)(高值,含批号)
        if @style in ('','V','')
        begin
            --总库更新,
            update wldata..Tbl_Inventory  set Num=Num-@quantity where Base_Code=@base_code and StockType=@StockType    and StockID=@stockId        
            --批次数量更新
            update wldata..Tbl_InventoryPerBatch set Num=Num-@quantity where Account=@account2 and Base_Code=@base_code and StockType=@StockType    and     StockID=@stockId    and PiNO =    @PiNO
            if @style in ('','')    
            begin
                update wldata..Tbl_QRManage set StockID=@stockTOKS where StockID=@stockId    and Account=@account2 and Base_code=@base_code and QR_code=@QR_Code and PiNO = @PiNO
            end 
            if @style in ('V')
            begin
                delete from WlData..Tbl_QRManage where QR_code=@QR_Code
            end
            if @style in ('')
            begin
                update WlData..Tbl_QRManage SET mastflag ='1' where QR_code = @QR_Code
            end
        end    
        -- 卫生材料管理系统  出库未接收撤回  标识
        if @style in ('withdraw')
        begin  
             update wldata..Tbl_Inventory  set Num=Num+@quantity where Base_Code=@base_code and StockType=@StockType    and  StockID=@stockId    
             
             update wldata..Tbl_InventoryPerBatch set Num=Num+@quantity where id =(select top(1) ID from wldata..Tbl_InventoryPerBatch where Base_Code=@base_code and StockType=@StockType and StockID=@stockId  order by odate)
        end     
        --修改批次库存数据(减)(普值,不含批号)
        if @style in ('4','r','5','e')
        begin   
            --总库更新,
            update wldata..Tbl_Inventory  set Num=Num-@quantity where Base_Code=@base_code and StockType=@StockType    and  StockID=@stockId    
                  
            --批次数量更新
            --修改韩
            
            update wldata..Tbl_InventoryPerBatch set Num=Num-@quantity where Base_Code=@base_code and StockType=@StockType and StockID=@stockId  
        end    
        if @style in('d')
        begin 
            declare @PiCiCount int
            declare @Account1 varchar(20)
            declare @Base_Code1 varchar(20)
            declare @num1 int
            declare @CountID int
            declare @pcID int
           declare @Odate1 datetime
         update wldata..Tbl_Inventory  set Num=Num-@quantity where Base_Code=@base_code and StockType=@StockType and  StockID=@stockId    
         
        SELECT @PiCiCount = COUNT(*) FROM  [WlData].[dbo].[Tbl_InventoryPerBatch]    where Base_Code=@base_code and StockType=@StockType     and  StockID=@stockId and num >0 
       IF @PiCiCount>0    
      
       SET @CountID =0
       WHILE @CountID< @PiCiCount
       begin
       select top(1) @pcID = ID, @account= Account,@Base_Code1=Base_Code,@num1 =num,@odate1=odate     from  [WlData].[dbo].[Tbl_InventoryPerBatch]    where Base_Code=@base_code and StockType=@StockType     and  StockID=@stockId and num >0  order by odate
       IF @quantity <@num1
       begin
       Update [WlData].[dbo].[Tbl_InventoryPerBatch]   set num  = num  -@quantity where ID = @pcID 
       break
       end
       else 
       begin
        set @quantity = @quantity-@num1 
        Update [WlData].[dbo].[Tbl_InventoryPerBatch]   set num  =0 where ID = @pcID
        set  @CountID  =@CountID+1
        end
        end
        end
        if @style in ('r','4')
        begin
            select @intCount = COUNT(a.Base_Code) from WlData..Tbl_InventoryPerBatch as a where @base_code = a.Base_Code and @stockId =StockID
            if @intCount =0
            begin
            declare @quantity1 as decimal(10,0)
            set @quantity1 = @quantity *-1
            insert into WlData..Tbl_Inventory(Base_Code,Num,StockID,StockType) values (@base_code,@quantity1,@stockId,@StockType)
            insert into WlData..Tbl_InventoryPerBatch(Account,PiNO,Base_Code,num,StockID,StockType,inprice,ExpiryDate,ProductCode,Provider_Code,inData,odate)
            values ('qxkb123','123123',@base_code,@quantity1,@stockId,@StockType,@inprice,@ExpiryDate,@ProductCode,@Provider_Code,@inDate,@odate)
            end    
                
        end
        --修改批次库存数据(加)(高值,需要加批号判定)
        if @style in('VIII')
        begin
            update wldata..Tbl_Inventory  set Num=Num+@quantity where Base_Code=@base_code and StockType=@StockType and StockID=@stockId        
            --批次数量更新
            select  @intCount=COUNT(a.Base_Code) from tbl_InventoryPerBatch a where a.Base_Code=@base_code and a.pino=@PiNO and a.ExpiryDate=@ExpiryDate and a.stockid=@stockId and a.ProductCode=@ProductCode and a.stocktype =@StockType and a.inprice= @inprice and a.Account=@account2 and a.PiNO =@PiNO
            update wldata..Tbl_InventoryPerBatch set Num=Num+@quantity where Account=@account2 and Base_Code=@base_code and StockType=@StockType and StockID=@stockId and PiNO = @PiNO
        if @intCount =0
        begin
            insert into [wldata].[dbo].[Tbl_InventoryPerBatch]([Account],[PiNO],[Base_Code] ,[num],[SterilizaDate],[ExpiryDate] ,[Provider_Code],[ProductCode],[StockID] ,[StockType],[inData],[odate],inprice) values (@account2,@PiNO,@base_code,@quantity,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@stockId,@StockType,@inDate,@odate,@inprice)
                end
        end    
            --修改批次库存数据(加)(普值,不需要判定批号)
        if @style in('h')
        begin
            update wldata..Tbl_Inventory  set Num=Num+@quantity where Base_Code=@base_code and StockType=@StockType and StockID=@stockId        
            --批次数量更新
            select  @intCount=COUNT(a.Base_Code) from tbl_InventoryPerBatch a where a.Base_Code=@base_code and a.pino=@PiNO and a.ExpiryDate=@ExpiryDate and a.stockid=@stockId and a.ProductCode=@ProductCode and a.stocktype =@StockType and a.inprice= @inprice and a.Account= @account2
            update wldata..Tbl_InventoryPerBatch set Num=Num+@quantity where Account=@account2 and Base_Code=@base_code and StockType=@StockType and StockID=@stockId
        if @intCount =0
        begin
            insert into [wldata].[dbo].[Tbl_InventoryPerBatch]([Account],[PiNO],[Base_Code] ,[num],[SterilizaDate],[ExpiryDate] ,[Provider_Code],[ProductCode],[StockID] ,[StockType],[inData],[odate],inprice) values (@account2,@PiNO,@base_code,@quantity,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@stockId,@StockType,@inDate,@odate,@inprice)
                end
        end    
    -- 修改
    end
    FETCH NEXT FROM c11 into @style,@StockType,@base_code,@quantity,@account,@account2,@stockId,@PiNO,@QR_Code,@SterilizaDate,@ExpiryDate,@Provider_Code,@ProductCode,@inprice,@inDate,@odate,@stockTOKS
    end
        
        close c11
        DEALLOCATE c11
    -- 修改
    END

     2.触发器实例2

    注:根据主表添加的数据类型   判断库存表的数量是否满足出库需求   出库数量>库存数量  不执行任何操作   出库数量<库存数量 减掉相应的库存  相等直接删除

    USE [WldataShow]
    GO
    /****** Object:  Trigger [dbo].[updatekucun1]    Script Date: 03/22/2017 10:59:33 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    
    
    ALTER TRIGGER [dbo].[updatekucun1]
      
       ON  [dbo].[记录表]
      for insert
    AS 
    declare @BaseCode as varchar(20) ,@BaseName as varchar(20),@BaseNum as decimal(10,0),@BaseDS as varchar(20),@BaseDW as varchar(20),@Ptype as varchar(20),
    @BaseColor as varchar(20),@OpStyle as varchar(20),@BaseID AS varchar(20),@BaseMS as varchar(20),@Provider as varchar(20)
    --declare @Provider as char(20)
    declare @intCount int
    declare @KuNum int
    
    
    select top 1 @BaseCode= BaseCode ,@BaseName = BaseName,@BaseNum=BaseNum,@BaseDS =BaseDS,@BaseID = BaseID, @BaseDW =BaseDW,@Ptype = Ptype,@BaseMS=BaseMS,@BaseColor =BaseColor,@OpStyle=OpStyle,@Provider= Provider from inserted order by RuTime
     begin 
      if @OpStyle in('C')
      begin 
         if @BaseCode in ('ZZY')
         select  @intCount=COUNT(BaseCode) from Tbl_KuCun1  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID = @BaseID
        select @KuNum  =  BaseNum from Tbl_KuCun1  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID = @BaseID
        begin 
         if (@intCount >0 and @BaseNum <= @KuNum)
          begin 
            update Tbl_KuCun1 set  BaseNum = @KuNum - @BaseNum  where  BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID = @BaseID
             declare @Max decimal(10,0)
             select  @Max = BaseNum from Tbl_KuCun1 where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID = @BaseID
             if(@Max = 0)
             begin 
              delete from Tbl_KuCun1 where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID = @BaseID
             end
             return
          end
          end
            if @BaseCode in ('BHWZ')
         select  @intCount=COUNT(BaseCode)  from Tbl_KuCun1  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseMS = @BaseMS
           
             select @KuNum  =  BaseNum  from Tbl_KuCun1  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseMS = @BaseMS
          begin 
         if (@intCount >0 and @BaseNum <= @KuNum)
          begin 
             update Tbl_KuCun1 set  BaseNum = @KuNum -@BaseNum  where  BaseCode =@BaseCode and BaseDS = @BaseDS and BaseMS = @BaseMS
             declare @Max1 decimal(10,0)
             select  @Max1 = BaseNum from Tbl_KuCun1 where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseMS = @BaseMS
             if(@Max1 = 0)
             begin 
              delete from Tbl_KuCun1 where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseMS = @BaseMS
             end
             return
         end
        end
          
            if @BaseCode in ('WZ')
         select  @intCount=COUNT(BaseCode)from Tbl_KuCun1  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID  = @BaseID and BaseColor =@BaseColor
        select @KuNum  =  BaseNum from Tbl_KuCun1 where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID  = @BaseID and BaseColor =@BaseColor
          begin 
         if (@intCount >0 and @BaseNum <= @KuNum)
          begin 
            update Tbl_KuCun1 set  BaseNum = @KuNum - @BaseNum  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID  = @BaseID and BaseColor =@BaseColor
             declare @Max11 decimal(10,0)
             select  @Max11 = BaseNum from Tbl_KuCun1  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID  = @BaseID and BaseColor =@BaseColor
             if(@Max11 = 0)
             begin 
              delete from Tbl_KuCun1  where BaseCode =@BaseCode and BaseDS = @BaseDS and BaseID  = @BaseID and BaseColor =@BaseColor
             end
             
             return
     end
     end
     
     
       if @BaseCode in ('ZGS')
         select  @intCount=COUNT(BaseCode) from Tbl_KuCun1  where BaseCode =@BaseCode and baseDS = @BaseDS and BaseID = @baseID
         
          select @KuNum  =  BaseNum from Tbl_KuCun1  where BaseCode =@BaseCode and baseDS = @BaseDS and BaseID = @baseID
         begin 
         if (@intCount >0 and @BaseNum <= @KuNum)
          begin 
            update Tbl_KuCun1 set  BaseNum = @KuNum - @BaseNum   where BaseCode =@BaseCode and baseDS = @BaseDS and BaseID = @baseID
            declare @Max111 decimal(10,0)
             select  @Max111 = BaseNum from Tbl_KuCun1 where BaseCode =@BaseCode and baseDS = @BaseDS and BaseID = @baseID
             if(@Max111 = 0)
             begin 
              delete from Tbl_KuCun1 where BaseCode =@BaseCode and baseDS = @BaseDS and BaseID = @baseID
             end return
          end
     end
     end
     end

    触发器理解:触发器是依附表格进行操作数据的工具,触发器无法像程序一样设置断点进行测试。要求在进行编写的时候先设计好判断的结构,然后再往里面添加操作。 declare  定义全局变量  begin  end 基本结构操作   while  循环

  • 相关阅读:
    集成服务监控器green.monitor发布
    细说Angular ngclass
    利用Travis CI 让你的github项目持续构建(Node.js为例)
    CSV和集合对象基于Annotation操作封装
    【HeadFirst 设计模式学习笔记】4 工厂模式
    【HeadFirst 设计模式学习笔记】5 单例模式
    【面向对象设计基础】常量数据管理器
    【面向对象设计基础】存取方法+Private类成员和方法
    【HeadFirst 设计模式学习笔记】3 装饰模式
    【HeadFirst 设计模式学习笔记】2 观察者模式
  • 原文地址:https://www.cnblogs.com/hanke123/p/6401510.html
Copyright © 2011-2022 走看看