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
?
hmm, cheers. Echaré un vistazo a eso. –
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! –