Gostaria de excluir um registro específico de duas ou mais tabelas vinculadas entre si.
Por exemplo: Tenho duas mesas, Alunos e vencedores. Gostaria de excluir os nomes Roy e Peter de ambas as mesas de uma só vez.
mesa: alunos
> ID name class
> 1 Roy 2
> 2 James 3
> 3 Carl 4
> 4 Peter 4
> 5 Alice 5
mesa: vencedores
St_ID achievement
1 1
2 1
3 3
4 5
5 5
Tenho mais de 100 tabelas com 50 registros específicos para serem deletados de todas as tabelas.
Você tem que conseguir isso usando Dynamic SQL Query
1- Primeiro você tem que listar todas as Tabelas com os Bancos de Dados Correspondentes em uma
Students
TabelaWinners
TempSeu script deve se parecer
Isso resultará em uma consulta como a seguinte ( se esses bancos de dados contiverem uma tabela
Students
Winners
)Eu não agora, se é isso que você estava pedindo em sua pergunta abaixo (sua pergunta não foi específica como esta, então minha resposta foi fornecer a lógica sql dinâmica em geral)
Você terá que listar explicitamente as tabelas das quais precisa excluir de qualquer maneira.
Um dos cenários seria criar uma tabela com a lista de tabelas que você deseja excluir e percorrer cada uma delas aplicando a
delete
instrução apropriada com base nosid's
alunos com nomes específicos.Para percorrer todas as tabelas do banco de dados, você pode usar algo assim:
E não esqueça de testar
delete
no ambiente de teste.Acho que a abordagem correta é primeiro excluir o registro da tabela do aluno sem o sql dinâmico e armazenar o ID excluído na tabela temporária.
assim,
No exemplo acima, não preciso usar "where name in()" todas as vezes. Eu uso uma vez e guardo na tabela temporária.
Por exemplo, estou usando o Adventure DB,
De SQL DELETE
E
Respondido em SO . (Deve ser adaptado à sua situação)
EDIT devido ao comentário do @NIC (e DV?):
Primeira opção: table_constraint (Transact-SQL)
e um exemplo em SO
Segunda opçao:
preparar mesas
Excluindo linhas
Testado no SQL Server 13.0.1722.0 nota: DROP TABLE IF EXIST pode não funcionar em versões mais antigas