2010-04-28 15 views
5

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?

risposta

7

Il tuo approccio sembra corretto. ALTER TABLE è l'unico modo per modificare un vincolo. Forse Management Studio necessita di un aggiornamento dei dati. Prova a fare clic con il pulsante destro del mouse su Aggiorna, oppure chiudi l'app e riaprila.

+0

hmm, evviva. Lo darò un'occhiata. –

+1

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! –

Problemi correlati