2010-04-28 6 views
5

In unserer SQL Server 2005-DB haben wir festgestellt, dass einige Fremdschlüssel nicht die Eigenschaft "On Delete Cascade" haben, was uns einige Verweisfehler gibt, wenn wir versuchen, einige Datensätze zu löschen.Aktualisieren einer Fremdschlüsseleinschränkung mit ON DELETE CASCADE wird nicht aktualisiert?

Verwenden Sie das Management Studio Ich scripted die DROP und CREATE SQL, aber es scheint, dass die CREATE nicht richtig funktioniert.

Die DROP:

USE [FootprintReports] 
GO 
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK__SUBSCRIPTIONS_Reports]') AND parent_object_id = OBJECT_ID(N'[dbo].[_SUBSCRIPTIONS]')) 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] DROP CONSTRAINT [FK__SUBSCRIPTIONS_Reports] 

und die CREATE

USE [FootprintReports] 
GO 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] WITH CHECK ADD CONSTRAINT [FK__SUBSCRIPTIONS_Reports] FOREIGN KEY([PARAMETER_ReportID]) 
REFERENCES [dbo].[Reports] ([ID]) 
ON DELETE CASCADE 
GO 
ALTER TABLE [dbo].[_SUBSCRIPTIONS] CHECK CONSTRAINT [FK__SUBSCRIPTIONS_Reports] 

Wenn ich manuell den Wert des in der GUI Löschen auf ändern, nach dem Löschen und erneutes Erstellen, die auf Löschen nicht korrekt ist aktualisiert.

Als Test, setze ich die Regel löschen in der GUI auf Set Null. Es wurde korrekt gelöscht und ohne Fehler neu erstellt. Wenn ich wieder in die GUI komme, zeigt es immer noch die Set Null als die Löschregel.

Habe ich etwas falsch gemacht? Oder gibt es eine andere Möglichkeit, eine Einschränkung zu bearbeiten, um die ON DELETE CASCADE Regel hinzuzufügen?

Antwort

7

Ihr Ansatz sieht korrekt aus. ALTER TABLE ist die einzige Möglichkeit, eine Abhängigkeit zu bearbeiten. Vielleicht benötigt Management Studio eine Datenaktualisierung. Klicken Sie mit der rechten Maustaste auf Aktualisieren, oder schließen Sie die App, und öffnen Sie sie erneut.

+0

hmm, Prost. Ich werde es mir ansehen. –

+1

Ja, das war das Problem. Aus irgendeinem Grund zeigte das Management Studio immer noch den alten Wert. Ich musste die App schließen und neu starten, bevor die Änderung angezeigt wurde. Vielen Dank! –

Verwandte Themen