Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Auto-referência de restrições de chave estrangeira e exclusão


Ao contrário do Andomar, eu ficaria feliz em usar um gatilho - mas não removeria a verificação de restrição. Se você implementá-lo como um instead of trigger, você pode redefinir as outras linhas para null antes de executar a exclusão real:
CREATE TRIGGER T_tabData_D
on tabData
instead of delete
as
    set nocount on
    update tabData set fiData = null where fiData in (select idData from deleted)
    delete from tabData where idData in (select idData from deleted)

É curto, é sucinto, não seria necessário se o SQL Server pudesse lidar com cascatas de chave estrangeira para a mesma tabela (em outros RDBMS', você pode apenas especificar ON DELETE SET NULL para a restrição de chave estrangeira, YMMV).