Can I invoke the function in a Trigger?

5

My function made in Sql-Server:

CREATE FUNCTION  dbo.getQuantidade(@idProd char)
RETURNS float
AS
BEGIN
      DECLARE @QTD float
      SET @QTD = (SELECT (prod.Quantidade)
      FROM Produto prod 
      where @id_prod = IdProduto)

return @QTD
END

My Trigger made ORACLE:

create or replace trigger seq_PedidoItem
Before insert on PedidoItem
for each row
begin

    if(:new.Quantidade > getQuantidade(:new.IdProduto)) then

    raise_application_error(-20101, 'Quantidade Pedida abaixo da quantidade do Stock');

    end if;

    :new.ValorTotal:= :new.Quantidade * getValor(:new.IdProduto);

end;
/

I wanted to adapt the trigger for SQL Server. Can someone give me a syntax help?

Note: I'm in doubt about how I if and how I invoke the function in trigger .

    
asked by anonymous 29.06.2016 / 16:58

1 answer

1

Can I invoke the function in a Trigger?

Yes you can call a function without problem.

In your case to use your if , you can redo the values of INSERT, UPDATE, DELETE of TRIGGER with (SELECT IdProduto FROM INSERTED) .

CREATE FUNCTION  dbo.getQuantidade(@idProd char)
RETURNS float
AS
BEGIN
      DECLARE @QTD float
      SET @QTD = (SELECT (prod.Quantidade)
      FROM Produto prod 
      where IdProduto = @idProd )

return @QTD
END



IF OBJECT_ID ('[dbo].[Produto]','TR') IS NOT NULL  
    DROP TRIGGER [dbo].[Produto];  
GO  
CREATE TRIGGER reminder2  ON [dbo].[Produto] 
AFTER INSERT, UPDATE, DELETE   
AS  

 DECLARE @IdProduto int, @Quantidade int;

 set @IdProduto = (SELECT IdProduto FROM INSERTED)
 set @Quantidade = (SELECT Quantidade FROM INSERTED)

 if(@Quantidade > dbo.getQuantidade(@IdProduto))
    begin
        RAISERROR ('Quantidade Pedida abaixo da quantidade do Stock', 16, 1); 
    end 
    else
    begin
        UPDATE Produto 
        SET ValorTotal = @Quantidade * getValor(@IdProduto);
        WHERE IdProduto = @IdProduto
    end
GO  
    
08.08.2016 / 19:58