Triệu chứng
Giả sử rằng bạn muốn xoá dữ liệu từ bảng và dữ liệu đang được tham chiếu trong các bảng trong Microsoft SQL Server 2016 và 2017. tôif bạn khám phá các truy vấn kế hoạch thực hiện, bạn có thể thấy sử dụng điều khiển kiểm tra tài liệu tham khảo khoá ngoại .Trong trường hợp này, bạn có thể nhận được một thông báo lỗi sau ngay cả khi hàng xoá không được tham chiếu trong các bảng:
Msg 547, mức 16, trạng thái 0, dòng LineNumber
Lệnh xóa liên kết với ràng buộc tham chiếu
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Giải pháp
Vấn đề này được khắc phục trong bản Cập Nhật tích luỹ sau cho SQL Server:
Lưu ý Vấn đề này được khắc phục trong bản Cập Nhật tích luỹ 6 cho SQL Server 2016 SP2.
Giới thiệu về Cập Nhật tích luỹ cho SQL Server:
Mỗi bản cập nhật tích lũy mới cho SQL Server chứa tất cả các bản cập nhật nóng và tất cả các bản sửa lỗi bảo mật đi kèm với bản cập nhật tích lũy trước đó. Kiểm tra các bản cập nhật tích lũy mới nhất cho SQL Server:
Cách giải quyết
Để khắc phục sự cố này, hãy sử dụng một trong các phương pháp sau:
-
Sử dụng mức độ tương thích dưới 130 chạy truy vấn này.
-
Thay đổi cấu trúc chỉ số trên bảng tham khảo.
Thông tin Bổ sung
Cơ sở dữ liệu khởi động scoped mức độ tương thích cấu hình 130 trong SQL Server 2016, kế hoạch thực thi truy vấn có thể sử dụng ngoại khóa tham chiếu Kiểm tra các điều khiển để kiểm tra nếu một hàng trong bảng được tham chiếu bởi bất kỳ hàng khác bảng đến tính toàn vẹn tham chiếu hạn chế. Người điều hành có thể được sử dụng nếu bảng được tham chiếu bởi nhiều ngoại bảng. Trong điều khiển này SQL Server chọn chỉ mục trong mỗi bảng tham khảo để thực hiện kiểm tra. Nếu bảng tham chiếu có chỉ với nhiều cột quan trọng, như một số cột đầu không phải là một phần của chính nước ngoài, nhưng một số khác cột là một phần của chính nước ngoài. Điều này có thể dẫn đến kiểm tra chính xác được thực hiện máy chủ SQL.
Ví dụ: Hãy xem xét sơ đồ sau:
tạo bảng tpk (SME int ràng buộc khoá chính CPK nhóm)
tạo bảng lấy (một int, fk int ràng buộc cfk tham chiếu ngoại khoá tpk, chỉ mục ia clustered(a,fk))
Sơ đồ như vậy có thể dẫn đến sự cố này, nhưng nếu bạn thay đổi Thứ tự cột trong mục ia để (fk, một), nó sẽ không.
Tham khảo
Tìm hiểu về các thuật ngữMicrosoft sử dụng để miêu tả các bản cập nhật phần mềm.