Eu tenho 2 tabelas: T1 e T2, são tabelas existentes com dados. Temos uma relação de um para muitos entre T1 e T2. Como altero as definições da tabela para executar a exclusão em cascata no SQL Server quando um registro de T1 é excluído, todos os registros associados em T2 também são excluídos.
A restrição externa existe entre eles. Não quero descartar as tabelas ou criar um gatilho para excluir o T2. Por exemplo, quando eu excluo um funcionário, todo o registro de revisão também deve desaparecer.
T1 - Empregado,
Employee ID
Name
Status
T2 - Revisões de Desempenho,
Employee ID - 2009 Review
Employee ID - 2010 Review
sql-server
cascading-deletes
Bichvan Nguyen
fonte
fonte
Para adicionar "exclusão em cascata" a uma chave estrangeira existente no SQL Server Management Studio:
Primeiro, selecione sua chave estrangeira e abra-a "DROP and Create To .." em uma nova janela de consulta.
Em seguida, basta adicionar
ON DELETE CASCADE
aoADD CONSTRAINT
comando:E clique no botão "Executar" para executar esta consulta.
A propósito, para obter uma lista de suas Chaves Estrangeiras e ver quais estão com a "exclusão em cascata" ativada, você pode executar este script:
E se você achar que não pode
DROP
uma tabela específica devido a uma restrição de chave estrangeira, mas não consegue descobrir qual FK está causando o problema, pode executar este comando:O SQL nesse artigo lista todos os FKs que fazem referência a uma tabela específica.
Espero que tudo isso ajude.
Desculpas pelo dedo comprido. Eu só estava tentando fazer um argumento.
fonte
Você pode fazer isso com o SQL Server Management Studio.
→ Clique com o botão direito do mouse no design da tabela e vá para Relacionamentos e escolha a chave estrangeira no painel esquerdo e no painel direito, expanda o menu "Especificação de INSERÇÃO e ATUALIZAÇÃO" e selecione "Cascata" como regra de exclusão.
fonte
Use algo como
Preencha os nomes de coluna corretos e você deve estar definido. Como mark_s afirmou corretamente, se você já possui uma restrição de chave estrangeira, talvez seja necessário excluir primeiro a antiga e depois criar a nova.
fonte
Primeiro a ativar a propriedade ONCascade:
1.Drop a restrição de chave estrangeira existente
2. adicione um novo com a configuração ON DELETE CASCADE ativada
Ex:
Segundo para desativar a propriedade ONCascade:
1.Drop a restrição de chave estrangeira existente
2. Adicione um novo com a configuração ON DELETE NO ACTION ativada
Ex:
fonte
ON DELETE CASCADE
Especifica que os dados filho são excluídos quando os dados pai são excluídos.
Para essa chave estrangeira, especificamos a
ON DELETE CASCADE
cláusula que informa ao SQL Server para excluir os registros correspondentes na tabela filho quando os dados na tabela pai são excluídos. Portanto, neste exemplo, se um valor de product_id for excluído da tabela de produtos, os registros correspondentes na tabela de inventário que usam esse product_id também serão excluídos.fonte
Se o relacionamento de um para muitos for de T1 a T2, ele não representa uma função e, portanto, não pode ser usado para deduzir ou inferir uma função inversa que garanta que o valor T2 resultante não omita as tuplas da junção T1 que são dedutivamente válidas. , porque não há função inversa dedutivamente válida. (representar funções era o objetivo das chaves primárias.) A resposta no SQL acha que sim, você pode fazê-lo. A resposta no pensamento relacional é não, você não pode fazê-lo. Veja pontos de ambiguidade no Codd 1970. O relacionamento deveria ser muitos-para-um de T1 a T2.
fonte
Eu acho que você não pode simplesmente excluir a propriedade de tabelas, e se esses forem dados de produção reais, basta excluir o conteúdo que não afeta o esquema da tabela.
fonte