sql >> Database >  >> RDS >> Sqlserver

Zelfverwijzende externe-sleutelbeperkingen en verwijderen

In tegenstelling tot Andomar zou ik graag een trigger gebruiken, maar ik zou de beperkingscontrole niet verwijderen. Als u het implementeert als een instead of trigger, kunt u de andere rijen resetten naar null voordat u de daadwerkelijke verwijdering uitvoert:

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)

Het is kort, het is beknopt, het zou niet nodig zijn als SQL Server cascades van vreemde sleutels naar dezelfde tabel zou kunnen verwerken (in andere RDBMS' kunt u misschien gewoon ON DELETE SET NULL opgeven voor de externe sleutelbeperking, YMMV).



  1. Kenmerk meer dan eens gebruiken in FOR XML Path T-SQL-query met dezelfde elementnaam

  2. Maak verbinding met MySQL op afstand via Python

  3. Postgresql's pg_dump en pg_restore in verschillende hoofdversies?

  4. MySQL- en SQLite-verschillen in SQL