2009-11-18 42 views
25

Tôi cố gắng để chạy một số kịch bản cập nhật trên cơ sở dữ liệu của tôi và tôi nhận được lỗi sau:SQL mâu thuẫn với các ràng buộc khoá ngoại

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_UPSELL_DT_AMRNO_AFMKTG_REF". The conflict occurred in database "ECOMVER", table "dbo.AFFILIATE_MKTG_REF", column 'AMRNO'.

Tôi đang chạy các kịch bản sau đây:

ALTER TABLE [dbo].[UPSELL_DATA] WITH CHECK ADD 
     CONSTRAINT [FK_UPSELL_DT_AMRNO_AFMKTG_REF] FOREIGN KEY 
     (
      [AMRNO] 
     ) REFERENCES [dbo].[AFFILIATE_MKTG_REF] (
      [AMRNO] 
     ) 
GO 

AMRNO là một PK trong bảng AFFILIATE_MKTG_REF.

Ngoài ra, tôi đã cố tạo mối quan hệ khóa ngoài bằng cách sử dụng tùy chọn sửa đổi bảng trong phòng quản lý SQL và tôi gặp lỗi tương tự. Tôi không chắc mình nên tìm gì?

Mọi đề xuất sẽ được đánh giá rất nhiều.

+2

Bằng cách thêm WITH NOCHECK, tôi có thể tạo mối quan hệ FK. Điều này dường như không đúng ... –

+4

Điều này về cơ bản sẽ làm cho ràng buộc "không đáng tin cậy" (http://www.mssqltips.com/tip.asp?tip=1539) - về cơ bản, điều này là KHÔNG kiểm tra đảm bảo ràng buộc là hợp lệ cho dữ liệu đã tồn tại trong các bảng và thay vào đó sẽ chỉ kiểm tra các bản ghi mới được chèn vào. – chadhoc

Trả lời

68

Bạn có thể có các bản ghi trong bảng [dbo]. [UPSELL_DATA] có các giá trị trong cột [AMRNO] không tồn tại trong bảng [dbo]. [AFFILIATE_MKTG_REF], cột [AMRNO]. Hãy thử một truy vấn như thế này để tìm những người mà không có hồ sơ phù hợp với:

select * 
from  [dbo].[UPSELL_DATA] u 
left join [dbo].[AFFILIATE_MKTG_REF] m 
on  u.AMRNO = m.AMRNO 
where m.AMRNO is null 
+0

Xin chào Chad, Cảm ơn bạn đã phản hồi. Có, có ba bản ghi trả lại từ truy vấn của bạn. Những hồ sơ này có cần phải được loại bỏ trước khi tôi tạo FK không? –

+2

Vâng, nếu bạn muốn tạo một ràng buộc đáng tin cậy, bạn sẽ phải xóa chúng khỏi bảng UPSELL_DATA, hoặc tạo các mục liên quan trong bảng AFFILIATE_MKTG_REF cho các ID đã cho. Lựa chọn duy nhất khác là giữ/tạo một ràng buộc không tin cậy như được thảo luận trong liên kết ở trên (và tại đây http://www.mssqltips.com/tip.asp?tip=1539). – chadhoc

+3

Đúng vậy. 5 năm của SQL và tôi không thể tìm ra cái này hôm nay, cà phê của tôi ở đâu. –

0

Tôi nghĩ bạn có dữ liệu bị hạn chế bởi chính try nước ngoài để kiểm tra dữ liệu trên cả hai bảng trước khi gán một phím nước ngoài, cho dù có những hạn chế trên cả hai bảng.

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