Trong máy chủ phiên bản SQL 2014 (12.0.2430.0 - chưa có SP1) với cơ sở dữ liệu ở chế độ tương thích 2012 (làm việc để chuyển sang 2014 ...) Tôi có một số đối tượng khóa ngoại được đánh dấu nhất quán như not trusted
trong cơ sở dữ liệu . Tôi đã bỏ và tạo lại chúng mà không có NOCHECK
tùy chọn, nhưng trong vòng 5-10 phút chúng lại trở nên không đáng tin cậy và nếu tôi tạo một CREATE
tập lệnh thì nó sẽ xuất hiện dưới dạng:
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Tập lệnh tạo đang được sử dụng là:
ALTER TABLE [dbo].[Points]
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
ALTER TABLE [dbo].[Points] CHECK CONSTRAINT [FK_BadgeId]
GO
Không có bản sao, không có công cụ của bên thứ ba và tôi đang theo dõi tất cả các câu lệnh DDL trên cơ sở dữ liệu để nó không phải là người dùng khác.
Tôi có thể kiểm tra các ràng buộc tốt (sử dụng WITH CHECK CHECK
trên từng) nhưng chúng vẫn trở nên không đáng tin cậy ngay sau đó. Chỉ các công việc bảo trì chạy là Ola vào đầu giờ sáng và điều này xảy ra suốt cả ngày.
Cập nhật:
Vì vậy, sau một vài dấu vết để thu hẹp các khả năng, có vẻ như nó BULK INSERT
có thể khiến cho việc FK
trở nên không đáng tin cậy. Câu hỏi msDN này nói rằng đây là một tuyến hợp lệ để khóa trở nên không tin cậy, đây là lần đầu tiên tôi nghe về nó.
Vì vậy, câu hỏi của tôi bây giờ là, có một chiến lược thay thế để sử dụng BULK INSERT
có thể duy trì is_trusted
trạng thái khóa ngoại ? Nó đang được thực thi trong bối cảnh một ứng dụng chạy vài lần mỗi giờ. Thay vào đó, tôi có thể yêu cầu các nhà phát triển bó các câu lệnh chèn của họ, nhưng tôi không muốn đưa ra tối hậu thư khi sử dụng BULK INSERT
nếu tôi không phải làm vậy.
SqlBulkCopy
với hiệu ứng tương tự, nhưng có (ít nhất là bây giờ) một tùy chọn để thực hiện sao chép số lượng lớn trong khi vẫn kiểm tra các ràng buộc - có nghĩa là cơ sở sao chép số lượng lớn có thể thực hiện kiểm tra chính, rất có thể bcp có một số tùy chọn để bật cái đó. Bất cứ ai thực hiện chế độ không kiểm tra, mặc định cần phải được đấm vào mặt.