首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL触发器update和insert

SQL触发器update和insert
EN

Stack Overflow用户
提问于 2015-01-04 03:09:32
回答 1查看 317关注 0票数 0

我有三张桌子OUTPUTINVENTORYPRODUCT

代码语言:javascript
复制
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),
}       

我已经创建了以下触发器:

代码语言:javascript
复制
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

和存储过程

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2015-01-04 03:39:17

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

切勿使用sql server关键字作为对象名称,如果确实有任何对象命名为任何关键字,请始终使用方括号[]将它们括起来。

触发器

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27758542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档