2010-04-28 15 views
5

En nuestra base de datos de SQL Server 2005 nos dimos cuenta de que algunas claves externas no tienen el conjunto de propiedades On Cascade, lo que nos da un par de errores de referencia cuando intentamos eliminar algunos registros.Actualizando una restricción de clave externa con ON DELETE CASCADE no actualizando?

Utilice Management Studio I con el código DROP y CREATE SQL, pero parece que el CREATE no funciona correctamente.

El 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] 

y 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] 

Si cambio manualmente el valor de la Borrar en la interfaz gráfica de usuario, después de caer y volver a crear, el En Eliminar no está correctamente actualizado.

Como prueba, configuro la regla Eliminar en la GUI en Set Null. Se cayó correctamente y se volvió a crear sin error. Si volví a la GUI, aún muestra el Set Null como la Regla de eliminación.

¿He hecho algo mal? o hay otra forma de editar una restricción para agregar la regla ON DELETE CASCADE?

Respuesta

7

Su enfoque parece correcto. ALTER TABLE es la única forma de editar una restricción. Tal vez Management Studio necesita una actualización de datos. Intente con el botón derecho Actualizar o cierre la aplicación y vuelva a abrirla.

+0

hmm, cheers. Echaré un vistazo a eso. –

+1

Sí, este fue el problema. Por alguna razón, Management Studio aún mostraba el valor anterior. Tuve que cerrar la aplicación y reiniciarla antes de que mostrara el cambio. ¡Gracias! –

Cuestiones relacionadas