【问题标题】:How to make trigger react on specific SP only如何使触发器仅对特定 SP 做出反应
【发布时间】:2018-10-02 19:18:46
【问题描述】:
create procedure UpdateIte(@iID int,@qtt int)
as begin
insert into updateItem
values(@iID,@qtt,getdate())
end

create procedure releseItem(@eid int,@qty int,@itemId int)
AS BEGIN
declare @no int,@qt int

select @no=qty
from Stock
where itemID=@itemID

if(@no>@qty)
BEGIN

    update Stock
    set qty=qty-@qty
    where itemID=@itemID

    select @qt=qty
    from Stock
    where itemID=@itemID

    insert into release
    values(@eid,@itemId,@qty,getdate())
    if(@qt<=10)
    BEGIN
        print'Item needs to replace'
    END

    else
        print'Success'
END
else
BEGIN
    print'Not Enough items in stock'
END
END

我想在发布使用员工 ID 更新发布表的项目时创建触发器。当我创建触发器时,它会同时触发两个程序。但我希望它通过 releaseItem 触发。我该怎么做?

创建触发器 CheckQty 有货 更新 一开始 声明@qty int、@emp int、@q int、@ItemId int

select @qty= qty, @emp=eid, @ItemId=ItemId
from inserted

select @q=qty
from Stock
where ItemId=@ItemId

if(@qty>0)
begin
    insert into releseItem
    values (@eid,@ItemId,@qty)
end
else
    rollback transaction
end

【问题讨论】:

  • 你能发布触发代码吗?
  • 打印?你确定这是mysql而不是sql server?
  • 您是否在询问是否可以禁用代码块中的触发器?如果是这样你可能对这个docs.microsoft.com/en-us/sql/t-sql/statements/…(假设是sql server)感兴趣
  • 由于您已经在使用 SP - 在特定 SP 中做所有您需要的事情,根本不要创建触发器。
  • 非常感谢

标签: sql sql-server


【解决方案1】:

您可以在触发器中执行存储过程,如下所示。

create trigger CheckQty ON Stock for Update as begin declare @qty int, @emp int, @q int,@ItemId int
select @qty= qty, @emp=eid, @ItemId=ItemId
from inserted

select @q=qty
from Stock
where ItemId=@ItemId

if(@qty>0)
begin

    exec releseItem @eid, @ItemId, @qty

end
else
    rollback transaction
end

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 2023-04-07
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多