Usuário com melhor resposta
SQL Inserir em Cascata

Pergunta
-
Existe a possibilidade de fazer um inserção em cascata no SQL?
No exemplo abaixo eu tenho a tabela Documento e a tabela Revisão, toda vez que eu inserir uma instancia na tabela Documento, automaticamente deve ser criada uma instancia de Revisão "inicial" para essa instancia de documento.
Existe algo como inserção em cascata no SQL?
Respostas
-
Naiara via banco de dados , vc pode usar Procedure
seque um exemplo no link
https://stackoverflow.com/questions/5762942/stored-procedure-to-insert-two-tables-with-relationship
ou se preferir via trigger, seque outro exemplo
https://www.devmedia.com.br/triggers-no-sql-server-teoria-e-pratica-aplicada-em-uma-situacao-real/28194
Wesley Neves - Brasilia-DFhttps://wesleyneves.wordpress.com/
SELECT Tab.[that's me:]
FROM
(
VALUES
('Wesley Neves'),
('Analista.NET'),
('Pós Graduando em Banco de Dados com ênfase em BI'),
('MTA -SQL Server'),
('MTA -Web Developed')
) AS Tab ("that's me:");
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
- Marcado como Resposta NAYARA_FJ quarta-feira, 28 de março de 2018 19:13
-
NAYARA_FJ ,dessa forma que vc fez sua trigger está inconsistente, eu te aconselho fazer via Procedure,
ela só vai funcionar corretamente se for apenas um insert , se for um batch ela vai se comportar de outra forma
seque uma sugestão de mudança
CREATE TRIGGER RevInitial ON dbo.Documento AFTER INSERT AS BEGIN INSERT INTO Revisao (Campo1, Campo2) SELECT I.Campo1, I.Campo2 FROM INSERTED I; END; GO
caso queira fazer via Trigger , por favor leia os artigos do Mestre José Diz
https://social.technet.microsoft.com/wiki/pt-br/contents/articles/38010.armadilhas-na-programacao-de-procedimentos-de-gatilho.aspx
E se possivel veja os videos de trigger do canal do gustavo Maia no youtube
https://www.youtube.com/watch?v=3VCl6wFn3yc
Wesley Neves - Brasilia-DFhttps://wesleyneves.wordpress.com/
SELECT Tab.[that's me:]
FROM
(
VALUES
('Wesley Neves'),
('Analista.NET'),
('Pós Graduando em Banco de Dados com ênfase em BI'),
('MTA -SQL Server'),
('MTA -Web Developed')
) AS Tab ("that's me:");
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
- Marcado como Resposta NAYARA_FJ quinta-feira, 29 de março de 2018 10:17
Todas as Respostas
-
Naiara via banco de dados , vc pode usar Procedure
seque um exemplo no link
https://stackoverflow.com/questions/5762942/stored-procedure-to-insert-two-tables-with-relationship
ou se preferir via trigger, seque outro exemplo
https://www.devmedia.com.br/triggers-no-sql-server-teoria-e-pratica-aplicada-em-uma-situacao-real/28194
Wesley Neves - Brasilia-DFhttps://wesleyneves.wordpress.com/
SELECT Tab.[that's me:]
FROM
(
VALUES
('Wesley Neves'),
('Analista.NET'),
('Pós Graduando em Banco de Dados com ênfase em BI'),
('MTA -SQL Server'),
('MTA -Web Developed')
) AS Tab ("that's me:");
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
- Marcado como Resposta NAYARA_FJ quarta-feira, 28 de março de 2018 19:13
-
Olá!
Eu consegui fazer essa trigger,
CREATE TRIGGER RevInitial ON [Documento] AFTER INSERT AS INSERT INTO Revisao (CodDocumento) VALUES (1);
Como posso recuperar o codDoc da tabela Documento e inserir em CodDocumento da tabela revisão?
Eu coloquei 1 pra testar. Não estou sabendo recuperar esse valor
-
Consegui!
CREATE TRIGGER RevInitial ON [Documento] AFTER INSERT AS BEGIN DECLARE @CodDoc INT SELECT @CodDoc = CodDoc FROM INSERTED INSERT INTO Revisao (CodDocumento) VALUES (@CodDoc); END GO
Muito obrigada!
- Editado NAYARA_FJ quarta-feira, 28 de março de 2018 19:15
-
NAYARA_FJ ,dessa forma que vc fez sua trigger está inconsistente, eu te aconselho fazer via Procedure,
ela só vai funcionar corretamente se for apenas um insert , se for um batch ela vai se comportar de outra forma
seque uma sugestão de mudança
CREATE TRIGGER RevInitial ON dbo.Documento AFTER INSERT AS BEGIN INSERT INTO Revisao (Campo1, Campo2) SELECT I.Campo1, I.Campo2 FROM INSERTED I; END; GO
caso queira fazer via Trigger , por favor leia os artigos do Mestre José Diz
https://social.technet.microsoft.com/wiki/pt-br/contents/articles/38010.armadilhas-na-programacao-de-procedimentos-de-gatilho.aspx
E se possivel veja os videos de trigger do canal do gustavo Maia no youtube
https://www.youtube.com/watch?v=3VCl6wFn3yc
Wesley Neves - Brasilia-DFhttps://wesleyneves.wordpress.com/
SELECT Tab.[that's me:]
FROM
(
VALUES
('Wesley Neves'),
('Analista.NET'),
('Pós Graduando em Banco de Dados com ênfase em BI'),
('MTA -SQL Server'),
('MTA -Web Developed')
) AS Tab ("that's me:");
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
- Marcado como Resposta NAYARA_FJ quinta-feira, 29 de março de 2018 10:17
-
Olá muito obrigada, depois com mais calma irei ler esses artigos que me indicou.
Eu sou nova com Banco de dados. Eu preferi fazer com Trigger mesmo devido a estrutura do código do meu programa. Mas gostei dessa outra opção, vou analisar melhor depois.
Eu precisava colocar o código da revisão vigente na tabela de documentos, fiz correto?
ALTER TRIGGER RevInitial ON dbo.Documento AFTER INSERT AS DECLARE @CodRev TABLE (CodD INT, CodR INT) BEGIN INSERT INTO Revisao (CodDocumento) OUTPUT INSERTED.CodRev, INSERTED.CodDocumento INTO @CodRev(CodR, CodD) SELECT I.CodDoc FROM INSERTED I; END; BEGIN UPDATE dbo.Documento SET CodRev = p.CodR FROM @CodRev p WHERE p.CodD = Documento.CodDoc END; GO
-
-
Em relação a Cod Cliente é proposital sim é um controle de documento na área de engenharia e projeto, então um documento normalmente possui 3 números, as vezes 4.<o:p></o:p>
Em relação a revisão, eu estou pensando ainda porque vou ter a opção também de descer revisão. Se eu for manter um histórico de revisão eu preciso desse campo, caso eu desça revisão deletando a revisão, ai eu posso eliminar esse campo, estou analisando ainda a melhor opção e se há necessidade de manter um histórico nesse caso. <o:p></o:p>
Em relação a chave composta eu ainda não sei quando é que se aplicar. Tenho que dar uma estudada nesse ponto. <o:p></o:p>
-
-
-
Olá muito obrigada pelos esclarecimentos, segunda feira vou tentar corrigir os erros.
"O que significa "descer a versão"?"
Esse caso aconteceria mais por erro do usuário acho, então vou deletar a linha da ultima revisão nesse caso.
Se um documento é novo, ele já tem revisão?!
Teoricamente a revisão é 0, mas nesse caso vou ter minhões de linhas de revisão a toa né? Isso pode impactar no desempenho do banco futuramente, acho que vou tratar isso de outra maneira.