Ich möchte temporäre Tabelle in SQL Server 2016 verwenden. Derzeit temporäre Tabellen erlauben die Verwendung von ON DELETE CASCADE nicht. Wie kann ich einen Auslöser implementieren, um das Verhalten zu imitieren? Ich möchte ausländische Schlüssel beibehalten, da ich die Navigationseigenschaften von Entity Framework in meiner Anwendung verwende.Wie kann ich einen SQL Server-Trigger als Alternative zu ON DELETE CASCADE implementieren?
Ich denke, ein After-Trigger funktioniert nicht, da die DELETE-Anweisung nicht mit Fremdschlüsselbedingung funktioniert.
Angenommen, wir haben die folgende einfache Situation:
- UserRole.UserId: Fremdschlüssel Role.Id
Wenn ich die Rolle mit Id == 2 lösche, als ich die zweite und vierte Zeile in UserRole löschen möchte. Wie kann ich dies ohne ON DELETE CASCADE in temporalen Tabellen implementieren?
Haben Sie schon von der 'Statt Triggers' gehört, ist es Google. –
Ja, aber INSTEAD OF-Trigger sind weder in der aktuellen noch in der Verlaufstabelle zulässig, um zu vermeiden, dass die DML-Logik ungültig wird. AFTER-Trigger sind nur für die aktuelle Tabelle zulässig. Sie werden in der Protokolltabelle blockiert, um zu verhindern, dass die DML-Logik ungültig wird. – cSteusloff
Betrachten Sie dies - wenn es einfach wäre, "ON DELETE CASCADE" über etwas wie einen Trigger zu implementieren, warum hätten die Microsoft-Entwickler "ON DELETE CASCADE" nicht mit einem solchen Mechanismus implementiert, anstatt es als Einschränkung aufzuführen? Jede Problemumgehung, die Sie versuchen, wird wahrscheinlich zu ähnlichen Einschränkungen führen. –