Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TRIGGER updateArmazem
- ON Movimentos
- FOR INSERT
- AS
- BEGIN
- declare @origem CHAR(10);
- declare @destino CHAR(10);
- declare @idArt int;
- declare @quantidade int;
- SELECT @origem=i.origem, @destino=i.destino, @idArt=i.idArtigo, @quantidade=i.quantidade from inserted i;
- IF NOT (@origem LIKE 'fornecedor' AND @destino LIKE 'loja') OR (@destino LIKE 'fornecedor')
- BEGIN
- IF @origem LIKE 'loja'
- BEGIN
- IF NOT EXISTS (SELECT * FROM armazem a WHERE idArt = @idArt AND a.seccao = 'defeito')
- BEGIN
- INSERT INTO armazem (idArt, quantidade, seccao) VALUES (@idArt, @quantidade, 'defeito');
- END
- ELSE
- BEGIN
- declare @quantidadeEscaparate int;
- SELECT @quantidadeEscaparate=e.quantidade FROM Escaparate e WHERE idArtigo = @idArt;
- IF @quantidade <= @quantidadeEscaparate
- BEGIN
- UPDATE Armazem
- SET quantidade = quantidade + @quantidade
- WHERE idArt = @idArt AND seccao = 'defeito';
- UPDATE Escaparate
- SET quantidade = quantidade - @quantidade
- WHERE idArtigo = @idArt;
- END
- ELSE
- BEGIN
- Print 'Quantidade não existente em loja';
- ROLLBACK TRANSACTION
- END
- END
- END
- ELSE IF @origem LIKE 'fornecedor'
- BEGIN
- IF NOT EXISTS (SELECT * FROM armazem a WHERE idArt = @idArt AND a.seccao = 'reposicao')
- BEGIN
- INSERT INTO armazem (idArt, quantidade, seccao) VALUES (@idArt, @quantidade, 'reposicao');
- END
- ELSE
- BEGIN
- UPDATE Armazem
- SET quantidade = quantidade + @quantidade
- WHERE idArt = @idArt AND seccao = 'reposicao';
- END
- END
- ELSE IF @origem LIKE 'armazem'
- BEGIN
- declare @quantidadeArmazem int;
- SELECT @quantidadeArmazem=quantidade FROM armazem a WHERE a.idArt = @idArt AND a.seccao = 'reposicao';
- IF @quantidadeArmazem >= @quantidade
- BEGIN
- UPDATE Escaparate
- SET quantidade = quantidade + @quantidade
- WHERE idArtigo = @idArt;
- UPDATE Armazem
- SET quantidade = quantidade - @quantidade
- WHERE idArt = @idArt;
- END
- ELSE
- BEGIN
- Print 'Quantidade não existente em armazém';
- ROLLBACK TRANSACTION
- END
- END
- END
- ELSE
- BEGIN
- Print 'Operação Inválida';
- ROLLBACK TRANSACTION
- END
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement