【问题标题】:SQL trigger update and insertSQL 触发器更新和插入
【发布时间】:2015-01-03 19:09:31
【问题描述】:

我有三个表 OUTPUTINVENTORYPRODUCT

Create Table OUTPUT(){
       OUTPUTID int indentity, -- output ID
       PRODUCTID varchar(10),
       QUANTUM int,
}
Create Table INVENTORY(){
       INVENTORYID int indentity, -- inventory ID
       QUANTUM int,
       QUANTUMOUT int, -- quantum out
}
Create Table PRODUCT(){
       PRODUCTID varchar(10),
}       

我创建了以下触发器:

create trigger [dbo].[trig_OUTPUT]
on [dbo].[OUTPUT]
after insert,update
as
begin
 Set nocount on;

    UPDATE INVENTORY 
    set INVENTORY.QUANTUMOUT = OUT.QUANTUM 
    from OUTPUT 
    inner join PRODUCT    on OUTPUT.PRODUCTID = PRODUCT.PRODUCTID 
    inner join INVENTORY  on PRODUCT.PRODUCT = INVENTORY.PRODUCT

end

和存储过程

CREATE procedure [dbo].[spud_addOUTPUT]
@productID varchar(10),
@quantum int
AS

 declare @quantumtemp int

  set @quantumtemp = (select QUANTUM from INVENTORY where INVENTORY.PRODUCTID = @productID)

if(@quantumtemp> @quantum or ISNULL(@quantumtemp,'0')='0')
 begin
    INSERT OUTPUT(PRODUCTID,QUANTUM) values(@productID,@quantum)
 end
else
  begin
    print 'do not insert quantum out greater quantum in inventory'
  end

但是,存储过程只适用于第一个,然后我调用存储过程。它没有更新INVENTORY 中的QUANTUMOUT

【问题讨论】:

    标签: sql sql-server stored-procedures triggers


    【解决方案1】:

    不知道你在这里使用什么逻辑,但我已经修复了语法错误,

    永远不要使用 sql server 关键字作为对象名称,如果您确实有任何对象命名为任何关键字,请始终在它们周围使用方括号 []

    触发器

    create trigger [dbo].[trig_OUTPUT]
    on [dbo].[OUTPUT]
    after insert,update
    as
    begin
     Set nocount on;
    
        UPDATE INVENTORY 
        set INVENTORY.QUANTUMOUT = [OUTPUT].QUANTUM   --<-- this should be OUTPUT
        from [OUTPUT] 
        inner join PRODUCT    on [OUTPUT].PRODUCTID = PRODUCT.PRODUCTID 
        inner join INVENTORY  on PRODUCT.PRODUCT = INVENTORY.PRODUCT
    
    end
    

    程序

    CREATE procedure [dbo].[spud_addOUTPUT]
    @productID varchar(10),
    @quantum int
    AS
    BEGIN
      SET NOCOUNT ON;
     declare @quantumtemp int
    
    SELECT TOP 1 @quantumtemp = QUANTUM from INVENTORY where PRODUCTID = @productID
    
    if(@quantumtemp> @quantum or ISNULL(@quantumtemp,'0')='0')
     begin
        INSERT INTO dbo.[OUTPUT](PRODUCTID,QUANTUM) 
        values(@productID,@quantum)
     end
    else
      begin
        print 'do not insert quantum out greater quantum in inventory'
      end
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2013-04-01
      相关资源
      最近更新 更多