Ich habe folgende DDL, die ich mit SQL Server 2012 bin mit:Muss ich ON DELETE NO ACTION auf meinem Fremdschlüssel angeben?
CREATE TABLE Subject (
[SubjectId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) Not NULL,
CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED ([SubjectId] ASC)
)
CREATE TABLE Topic (
[TopicId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[SubjectId] INT NOT NULL,
CONSTRAINT [PK_Topic] PRIMARY KEY CLUSTERED ([TopicId] ASC)
)
ALTER TABLE [Topic] WITH CHECK ADD CONSTRAINT [FK_TopicSubject]
FOREIGN KEY([SubjectId]) REFERENCES [Subject] ([SubjectId])
ON DELETE NO ACTION
Was ich will, für den SQL-Server ist, mich zu stoppen einen Elternteil zu löschen, wenn ein Verweis auf den übergeordneten in dem Kind existiert? Zum Beispiel möchte ich eine Löschung auf subjectID = 3 in Betreff, um zu scheitern, wenn es Kinder mit SubjectId von 3 gibt.
Dafür bin ich unklar und kann nicht scheinen, die Antwort zu finden. Muss ich "DELETE NO ACTION" hinzufügen oder kann ich diese drei Wörter nicht entfernen.
Ich stelle diese Frage, da ich in einer ähnlichen Frage eine Antwort hatte, dass ich einen Auslöser auf dem Eltern definieren sollte. Ich dachte jedoch, nur den Fremdschlüssel zu definieren würde mich stoppen, den Elternteil zu löschen, wenn ein Kind existiert.
Dave - Es tut mir leid, aber ich bin ein wenig verwirrt von "Gibt an, welche Aktion mit Zeilen in der Tabelle passiert, die geändert wird, wenn diese Zeilen eine referenzielle Beziehung haben und die referenzierte Zeile aus der übergeordneten Tabelle gelöscht wird." Was bedeutet das in Bezug auf meine Themen- und Thementische? – Melina
Ja Betreff ist das Elternteil und Thema ist die Kindtabelle. – DaveShaw
Meine Antwort wurde aktualisiert. – DaveShaw