2010-04-28 40 views
5

Chúng tôi đã nhận ra trong SQL Server 2005 DB của chúng tôi rằng một số khóa ngoại không có bộ thuộc tính On Delete Cascade, cho chúng ta một số lỗi tham chiếu khi chúng tôi thử và xóa một số bản ghi.Cập nhật ràng buộc khóa ngoại với ON DELETE CASCADE không cập nhật?

Sử dụng Studio quản lý tôi đã viết mã số DROPCREATE SQL, nhưng có vẻ như là CREATE không hoạt động chính xác.

Các 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] 

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] 

Nếu tôi tự thay đổi giá trị của On Xóa trong GUI, sau khi giảm và tái tạo, On Xóa không phải là chính xác đã cập nhật.

Để kiểm tra, tôi đặt quy tắc Xóa trong GUI thành Set Null. Nó bị xóa một cách chính xác và được tạo lại mà không có lỗi. Nếu tôi trở lại GUI, nó vẫn hiển thị Set Null làm Quy tắc xóa.

Tôi đã làm gì sai? hoặc có cách nào khác để chỉnh sửa ràng buộc để thêm quy tắc ON DELETE CASCADE không?

Trả lời

7

Cách tiếp cận của bạn có vẻ chính xác. ALTER TABLE là cách duy nhất để chỉnh sửa ràng buộc. Có lẽ Management Studio cần làm mới dữ liệu. Hãy thử nhấp chuột phải Làm mới hoặc đóng ứng dụng và mở lại.

+0

hmm, chúc mừng. Tôi sẽ xem xét điều đó. –

+1

Vâng, đây là vấn đề. Vì lý do nào đó, Management Studio vẫn hiển thị giá trị cũ. Tôi phải đóng ứng dụng và khởi động lại ứng dụng trước khi nó hiển thị thay đổi. Cảm ơn! –

Các vấn đề liên quan