Abbiamo realizzato nel nostro DB di SQL Server 2005 che alcune chiavi esterne non hanno il set di proprietà On Delete Cascade, che ci sta dando un paio di errori referenziali quando proviamo e cancelliamo alcuni record.Aggiornamento di un vincolo di chiave esterna con ON DELETE CASCADE non si sta aggiornando?
Utilizzare lo studio di gestione I ha copiato gli SQL DROP
e CREATE
, ma sembra che il CREATE
non funzioni correttamente.
Il 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]
e la 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]
Se cambio manualmente il valore della su Eliminare nella GUI, dopo aver lasciato e ricreare, l'On Elimina non è correttamente aggiornato.
Come test, ho impostato la regola Delete nella GUI su Set Null
. È stato rilasciato correttamente e ricreato senza errori. Se torno alla GUI, sta ancora mostrando Set Null
come regola di cancellazione.
Ho fatto qualcosa di sbagliato? o c'è un altro modo per modificare un vincolo per aggiungere la regola ON DELETE CASCADE
?
hmm, evviva. Lo darò un'occhiata. –
Sì, questo era il problema. Per qualche motivo, Management Studio mostrava ancora il vecchio valore. Ho dovuto chiudere l'app e riavviarla prima di visualizzare la modifica. Grazie! –