Usuário com melhor resposta
Exemplo de uma procedore que executa automaticamente dando um insert e updata

Pergunta
-
Respostas
-
José,
Concordo com o Durval, uma opção seria por exemplo criar um Trigger que executa uma Stored Procedure de acordo com a necessidade.
Veja este exemplo:
Create TRIGGER [dbo].[T_Formatar_Numero] On [dbo].[CTPRODUCAO] AFTER INSERT AS SET NOCOUNT ON Exec P_Formatar_Numero Exec P_Inserir_Analise_Resultados
CREATE PROCEDURE [dbo].[P_Formatar_Numero] As SET NOCOUNT ON UPDATE CTPRODUCAO SET NUMPVM=(SELECT CASE LEN(CODSEQUENCIAL) WHEN 1 THEN REPLICATE('0',3)+CONVERT(CHAR(1),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) WHEN 2 THEN REPLICATE('0',2)+CONVERT(CHAR(2),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) WHEN 3 THEN REPLICATE('0',1)+CONVERT(CHAR(3),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) WHEN 4 THEN CONVERT(CHAR(4),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) END From CTPRODUCAO WHERE NUM='0') WHERE NUM='0'
Create PROCEDURE [dbo].[P_Inserir_Analise_Resultados] AS SET NOCOUNT ON DECLARE @NUMMP CHAR(7) SET @NUMMP=(SELECT ISNULL(MAX(NUMMP),1) FROM CTENTRADA_PQC WHERE YEAR(DATAALMOX)=YEAR(GETDATE())) INSERT INTO CTENTRADA_PQC_RESULTADOS(NUMMP, CODRELACIONAMENTO, CODSEQUENCIALPRODUTO, CODSEQUENCIALMETODO, AMOSTRA) SELECT PQC.NUMMP, PQCx.CODRELACIONAMENTO, PQCx.CODSEQUENCIALPRODUTO, PQCx.CODSEQUENCIALMETODO, '' FROM CTENTRADA_PQC PQC INNER JOIN PQCxME PQCx ON PQC.NUMMP = @NUMMP INNER JOIN PRODUTOSQUIMICOS PQ ON PQCx.CODSEQUENCIALPRODUTO = PQ.CODSEQUENCIALPRODUTO AND PQC.NUMCADASTRO = PQ.NUMCADASTRO AND PQCx.CODRELACIONAMENTO = (SELECT MAX(PQCx.CODRELACIONAMENTO) FROM PQCxME PQCx INNER JOIN PRODUTOSQUIMICOS PQ ON PQCx.CODSEQUENCIALPRODUTO = PQ.CODSEQUENCIALPRODUTO WHERE PQ.NUMCADASTRO = PQC.NUMCADASTRO) GROUP BY PQC.NUMMP, PQCx.CODSEQUENCIALPRODUTO, PQCx.CODRELACIONAMENTO, PQCx.CODSEQUENCIALMETODO, PQCx.CODSEQUENCIAL ORDER BY PQCx.CODSEQUENCIAL
Todas as vezes que CTProducao for manipulada durante um Insert serão executadas as Stored Procedures responsáveis em Formatar a Numeração e a outra para Inserir os resutados.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Marcado como Resposta Xarp2 quarta-feira, 20 de agosto de 2014 20:03
-
José,
Como o Flávio indicou, o funcionamento de uma procedure é diferente de uma trigger.
A Trigger é executada "automaticamente" antes ou após uma ação disparada para uma determinada tabela.
Já a procedure precisa de uma ação manual ou através de um ação externa (como indicado pelo Flávio).
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Xarp2 quarta-feira, 20 de agosto de 2014 20:03
Todas as Respostas
-
José,
O que você quer talvez seja uma trigger, ela sim é acionada automaticamente após uma determinada ação na tabela, seja um insert, um delete ou um update...
Uma procedure só é acionada por um job ou usando o SQLCMD através do agendador de tarefas do windows ou chamada por alguma outra rotina...
Flávio Farias
"May the Force be with you"
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
José,
Como o Flávio indicou, o funcionamento de uma procedure é diferente de uma trigger.
A Trigger é executada "automaticamente" antes ou após uma ação disparada para uma determinada tabela.
Já a procedure precisa de uma ação manual ou através de um ação externa (como indicado pelo Flávio).
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Xarp2 quarta-feira, 20 de agosto de 2014 20:03
-
José,
Concordo com o Durval, uma opção seria por exemplo criar um Trigger que executa uma Stored Procedure de acordo com a necessidade.
Veja este exemplo:
Create TRIGGER [dbo].[T_Formatar_Numero] On [dbo].[CTPRODUCAO] AFTER INSERT AS SET NOCOUNT ON Exec P_Formatar_Numero Exec P_Inserir_Analise_Resultados
CREATE PROCEDURE [dbo].[P_Formatar_Numero] As SET NOCOUNT ON UPDATE CTPRODUCAO SET NUMPVM=(SELECT CASE LEN(CODSEQUENCIAL) WHEN 1 THEN REPLICATE('0',3)+CONVERT(CHAR(1),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) WHEN 2 THEN REPLICATE('0',2)+CONVERT(CHAR(2),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) WHEN 3 THEN REPLICATE('0',1)+CONVERT(CHAR(3),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) WHEN 4 THEN CONVERT(CHAR(4),CODSEQUENCIAL)+'/'+SUBSTRING(CONVERT(CHAR(4),DATEPART(YEAR,GETDATE())),3,2) END From CTPRODUCAO WHERE NUM='0') WHERE NUM='0'
Create PROCEDURE [dbo].[P_Inserir_Analise_Resultados] AS SET NOCOUNT ON DECLARE @NUMMP CHAR(7) SET @NUMMP=(SELECT ISNULL(MAX(NUMMP),1) FROM CTENTRADA_PQC WHERE YEAR(DATAALMOX)=YEAR(GETDATE())) INSERT INTO CTENTRADA_PQC_RESULTADOS(NUMMP, CODRELACIONAMENTO, CODSEQUENCIALPRODUTO, CODSEQUENCIALMETODO, AMOSTRA) SELECT PQC.NUMMP, PQCx.CODRELACIONAMENTO, PQCx.CODSEQUENCIALPRODUTO, PQCx.CODSEQUENCIALMETODO, '' FROM CTENTRADA_PQC PQC INNER JOIN PQCxME PQCx ON PQC.NUMMP = @NUMMP INNER JOIN PRODUTOSQUIMICOS PQ ON PQCx.CODSEQUENCIALPRODUTO = PQ.CODSEQUENCIALPRODUTO AND PQC.NUMCADASTRO = PQ.NUMCADASTRO AND PQCx.CODRELACIONAMENTO = (SELECT MAX(PQCx.CODRELACIONAMENTO) FROM PQCxME PQCx INNER JOIN PRODUTOSQUIMICOS PQ ON PQCx.CODSEQUENCIALPRODUTO = PQ.CODSEQUENCIALPRODUTO WHERE PQ.NUMCADASTRO = PQC.NUMCADASTRO) GROUP BY PQC.NUMMP, PQCx.CODSEQUENCIALPRODUTO, PQCx.CODRELACIONAMENTO, PQCx.CODSEQUENCIALMETODO, PQCx.CODSEQUENCIAL ORDER BY PQCx.CODSEQUENCIAL
Todas as vezes que CTProducao for manipulada durante um Insert serão executadas as Stored Procedures responsáveis em Formatar a Numeração e a outra para Inserir os resutados.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Marcado como Resposta Xarp2 quarta-feira, 20 de agosto de 2014 20:03