简体   繁体   English

SQL触发器更新和插入

[英]SQL trigger update and insert

I have three table OUTPUT , INVENTORY and PRODUCT 我有三个表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),
}       

I have created the following trigger : 我创建了以下触发器:

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

and stored procedure 和存储过程

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

However,a stored procedure only works on the first, then I call a stored procedure. 但是,存储过程仅在第一个起作用,然后我调用存储过程。 it didn't update column QUANTUMOUT in INVENTORY 它没有更新INVENTORY QUANTUMOUT

Dont know what logic you are using here but I have fixed the syntactical errors, 不知道您在这里使用什么逻辑,但是我已经修复了语法错误,

Never use sql server key words for your object names, if you do have any objects named any of the key words, use square brackets [] around them always. 切勿使用sql server关键字作为对象名称,如果确实有任何命名为任何关键字的对象,请始终在其周围使用方括号[]

Trigger 触发

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

Procedure 程序

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM