2015-01-03 165 views
0

我有三个表OUTPUTINVENTORYPRODUCTSQL触发更新和插入

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

回答

0

不要更新列QUANTUMOUT知道你正在使用什么这里逻辑,但我有固定的语法错误,

切勿使用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