Ich habe 2 Tabellen: T1 und T2, es handelt sich um bestehende Tabellen mit Daten. Zwischen T1 und T2 besteht eine Eins-zu-viele-Beziehung. Wie ändere ich die Tabellendefinitionen, um ein kaskadierendes Löschen in SQL Server durchzuführen, wenn ein Datensatz aus T1 gelöscht wird, werden alle zugehörigen Datensätze in T2 ebenfalls gelöscht.
Die fremde Einschränkung ist zwischen ihnen vorhanden. Ich möchte die Tabellen nicht löschen oder einen Trigger erstellen, um die Löschung für T2 durchzuführen. Wenn ich z. B. einen Mitarbeiter lösche, sollten auch alle Überprüfungsdatensätze gelöscht werden.
T1 - Mitarbeiter,
Employee ID
Name
Status
T2 - Leistungsbeurteilungen,
Employee ID - 2009 Review
Employee ID - 2010 Review
Das müssen Sie tun,
Etwa so:
ALTER TABLE dbo.T2
DROP CONSTRAINT FK_T1_T2 -- or whatever it's called
ALTER TABLE dbo.T2
ADD CONSTRAINT FK_T1_T2_Cascade
FOREIGN KEY (EmployeeID) REFERENCES dbo.T1(EmployeeID) ON DELETE CASCADE
Verwenden Sie etwas wie
ALTER TABLE T2
ADD CONSTRAINT fk_employee
FOREIGN KEY (employeeID)
REFERENCES T1 (employeeID)
ON DELETE CASCADE;
Geben Sie die richtigen Spaltennamen ein, und Sie sollten fertig sein. Wie mark_s richtig feststellte, müssen Sie, wenn Sie bereits eine Fremdschlüssel-Beschränkung haben, möglicherweise zuerst die alte löschen und dann die neue erstellen.
Erstes Aktivieren der ONCascade-Eigenschaft:
2.fügen Sie eine neue hinzu, bei der die Einstellung ON DELETE CASCADE aktiviert ist
Beispiel:
IF EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Response'))
BEGIN
ALTER TABLE [dbo].[Response] DROP CONSTRAINT [FK_Response_Request]
ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request] FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE CASCADE
END
ELSE
BEGIN
ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request] FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE CASCADE
END
Second To Disable ONCascade-Eigenschaft:
2.fügen Sie eine neue mit der aktivierten Einstellung ON DELETE NO ACTION hinzu
Beispiel:
IF EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.Response'))
BEGIN
ALTER TABLE [dbo].[Response] DROP CONSTRAINT [FK_Response_Request]
ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request] FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE CASCADE
END
ELSE
BEGIN
ALTER TABLE [dbo].[Response] WITH CHECK ADD CONSTRAINT [FK_Response_Request] FOREIGN KEY([RequestId])
REFERENCES [dbo].[Request] ([RequestId])
ON DELETE NO ACTION
END