Xóa khóa ngoại trong sql

      214

Tôi tất cả 2 bảng: T1 và T2, bọn chúng là các bảng hiện nay gồm tài liệu. Chúng tôi tất cả mối quan hệ một đến những giữa T1 và T2. Làm cách như thế nào nhằm đổi khác có mang bảng để tiến hành xóa tầng vào SQL Server lúc bạn dạng ghi trường đoản cú T1 bị xóa, tất cả các bạn dạng ghi tương quan vào T2 cũng bị xóa.

Bạn đang xem: Xóa khóa ngoại trong sql

Các buộc ràng quốc tế là trọng tâm bọn chúng. Tôi không thích vứt các bảng hoặc tạo ra một trình kích hoạt để xóa tài liệu mang lại T2. ví dụ như, Lúc tôi xóa một nhân viên cấp dưới, tất cả các hồ sơ Review cũng trở nên bặt tăm.

T1 - Nhân viên,

Employee ID NameStatusT2 - Đánh giá bán hiệu suất,

Employee ID - 2009 ReviewEmployee ID - 2010 nhận xét
sql-hệ thống cascading-deletes
— Bíchvan Nguyễn nguồn
Câu trả lời:


362

quý khách hàng đã đề nghị cho,

Bỏ các ràng buộc khóa ngoại hiện tất cả,Thêm một chiếc bắt đầu với ON DELETE CASCADEsetup được kích hoạt.

Xem thêm: 12 Phần Mềm Chỉnh Sửa Anh Trên Máy Tính Miễn Phí 2020, Chỉnh Sửa Ảnh

Cái gì đó như:

ALTER TABLE dbo.T2 DROPhường. CONSTRAINT FK_T1_T2 -- or whatever it"s calledALTER TABLE dbo.T2 Địa chỉ cửa hàng CONSTRAINT FK_T1_T2_Cascade FOREIGN KEY (EmployeeID) REFERENCES dbo.T1(EmployeeID) ON DELETE CASCADE
— marc_s mối cung cấp
3
Đội của tớ cùng tôi vừa làm điều đó. Chúng tôi vẫn cần DROP. các buộc ràng của chúng tôi và thêm chúng. Điều này làm việc mang đến chúng tôi.
— Daniel L. VanDenBosch
2
Làm cầm cố nào là vấn đề đó hữu dụng mang đến việc xóa cứng? Một xóa mềm sẽ không còn lúc nào gồm một vấn đề buộc ràng. Có vẻ hoàn toàn trở lại với tôi.
— Maxx
2
Maxx Trong xóa cứng, chúng ta xóa một phiên bản ghi cùng ko bắt buộc băn khoăn lo lắng về các thanh ghi mồ côi, trong lúc xóa mềm bạn cần thực hiện bằng tay.
— Ronalvị Araújo Alves
318
Để thêm "Xóa tầng" vào khóa nước ngoài hiện nay tất cả vào Squốc lộ Server Management Studio:

Trước hết, chọn Khóa nước ngoài của người tiêu dùng với msinh sống "DROPhường và Tạo để .." trong hành lang cửa số Truy vấn mới.

*

Sau đó, chỉ việc thêm ON DELETE CASCADEvào Địa chỉ cửa hàng CONSTRAINTlệnh:

*
Và dấn nút ít "Thực thi" để chạy tầm nã vấn này.

Nhân tiện thể, để sở hữu được danh sách Khóa nước ngoài của bạn cùng xem loại làm sao đang nhảy "Xóa tầng", bạn có thể chạy tập lệnh này:

SELECT OBJECT_NAME(f.parent_object_id) AS "Table name", COL_NAME(fc.parent_object_id,fc.parent_column_id) AS "Field name", delete_referential_action_desc AS "On Delete"FROM sys.foreign_keys AS f, sys.foreign_key_columns AS fc, sys.tables t WHERE f.OBJECT_ID = fc.constraint_object_idAND t.OBJECT_ID = fc.referenced_object_idORDER BY 1Và nếu như bạn thấy rằng chúng ta tất yêu tất cả DROPmột bảng rõ ràng vì buộc ràng Khóa quanh đó, nhưng bạn thiết yếu đưa ra FK làm sao tạo ra sự vậy, thì bạn cũng có thể chạy lệnh này:

sp_help "TableName"Squốc lộ trong nội dung bài viết kia liệt kê toàn bộ những FK tđam mê chiếu một bảng ví dụ.