Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Leme

Trigger que simule delete cascade no 7.0

Recommended Posts

:unsure: Pessoal, estou com um SQL Server 7.0 que ainda não possui o recurso de Delete Cascade na criação das tabelas e estou precisando criar uma trigger que simule isso.

 

Minha dúvida é a seguinte:

Considere que eu tenha 3 tabelas: A, B e C.

A tabela A está relacionada com a B e a B com a C. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Quando eu apagar a Tabela A, a trigger deverá apagar o registro da B, e também o respectivo registro(s) que estiver relacionado na C.

 

Eu montei a trigger da seguinte forma:

 

create trigger Deletaregistros

on A for delete

as

-- excluir todos os itens relacionados

delete from B

where campochave in (select campochave from deleted)

 

Até ai vai beleza... Eu não estou conseguindo apagar os registros da tabela B, já que a tabela

"deleted" não tem a chave dessa tabela...

 

Alguém tem alguma sugestão?

 

Eu tentei criar uma trigger que quando a tabela B for apagada, apague também a C, só que não deu certo...

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Ricardo Leme disse:

:unsure: Pessoal, estou com um SQL Server 7.0 que ainda não possui o recurso de Delete Cascade na criação das tabelas e estou precisando criar uma trigger que simule isso.Minha dúvida é a seguinte:Considere que eu tenha 3 tabelas: A, B e C.A tabela A está relacionada com a B e a B com a C. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Quando eu apagar a Tabela A, a trigger deverá apagar o registro da B, e também o respectivo registro(s) que estiver relacionado na C.Eu montei a trigger da seguinte forma:create trigger Deletaregistros on A for delete as -- excluir todos os itens relacionados delete from B where campochave in (select campochave from deleted)Até ai vai beleza... Eu não estou conseguindo apagar os registros da tabela B, já que a tabela"deleted" não tem a chave dessa tabela...Alguém tem alguma sugestão?Eu tentei criar uma trigger que quando a tabela B for apagada, apague também a C, só que não deu certo...Obrigado!

Camarada, Você tem que analisar seu modelo de dados, pois pelo que você está relatando o que falta éa relação de referência entre as tabelas. Você tem que ter alguma relação entre as tabelas.Envie a estrutura das suas tabelas (luzserg@globo.com)Sds, Antonio Sergio http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Marcelo Barcellos disse:

Cara..Dá uma olhada direito por que a "delete cascade" tem no SQL 7 sim.Aliás, tem até no Access !!!

Marcelo,Agradeço a dica http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Mas infelizmente a versão 7.0 não suporta o delete cascade...Eu até procurei algo na Microsoft, e no documento dos novos itens do SQL 2000 está citando isso como novidade...http://msdn.microsoft.com/msdnmag/issues/0...00/default.aspx http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.Bom, eu sei que o artigo já está ai faz um tempo, mas tive o mesmo problema recentemente, só que no SQL Server 2000. Ele tem suporte aos "ON DELETE CASCADE", mas não a deletes múltiplos (com mais de uma referência a mesma tabela).O problema é que os triggers não funcionavam porque as tabelas tinham relacionamento com FKs, então não podia apagar as tabelas "pais" antes das "filhas". O que fiz foi triggers INSTEAD OF para cada tabela pai, deletando os registros correspondentes das tabelas "filhas". O último comando de trigger era um DELETE da tabela "pai". O triggers INSTEAD OF não é chamado recursivamente, então o DELETE é realizado ao invés de cair no INSTEAD OF de novo.Com um trigger para cada tabela pai, dá pra fazer o cascade. Dependendo do tamanho do seu banco, dá dtrabalho, mas funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.