Câu lệnh INSERT bị xung đột với ràng buộc FOREIGN KEY - SQL Server


225

Tôi nhận được lỗi sau. Liệu bạn có thể giúp mình không?

Msg 547, Cấp 16, Trạng thái 0, Dòng 1
Câu lệnh INSERT đã xung đột với ràng buộc FOREIGN KEY "FK_Sup_Item_Sup_Item_Cat". Xung đột xảy ra trong cơ sở dữ liệu "dev_bo", bảng "dbo.Sup_Item_Cat". Các tuyên bố này đã bị chấm dứt.

Mã số:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')

Cột cuối cùng client_idgây ra lỗi. Tôi đã cố gắng đặt giá trị đã tồn tại trong dbo.Sup_Item_Catcột, tương ứng với sup_item .. nhưng không có niềm vui :-(


20
Bạn đã cố gắng chèn một bản ghi vào bảng mục của bạn không có bản ghi danh mục phù hợp trong Sup_Item_Catbảng của bạn . Không có nhiều điều khác để nói về nó.
Martin Smith

1
Vì vậy, bạn đang nói rằng SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'trả về kết quả?
Martin Smith

2
Ngoài ra, bạn nói "coulum cuối cùng" client_id "tôi đang nhận được xung đột." Đây không phải là những gì thông báo lỗi ngụ ý Tôi nghĩ rằng bạn đang tìm sai chỗ cho vấn đề của mình.
Martin Smith

Câu trả lời:


287

Trong bảng của bạn dbo.Sup_Item_Cat, nó có một tham chiếu khóa ngoài đến một bảng khác. Cách thức hoạt động của FK là nó không thể có giá trị trong cột đó mà cũng không nằm trong cột khóa chính của bảng được tham chiếu.

Nếu bạn có SQL Server Management Studio, hãy mở nó lên và sp_help' dbo.Sup_Item_Cat'. Xem cột nào FK được bật và cột nào tham chiếu bảng nào. Bạn đang chèn một số dữ liệu xấu.

Hãy cho tôi biết nếu bạn cần bất cứ điều gì giải thích tốt hơn!


10
Cảm ơn vì đã bao gồm lệnh sp_help! Giúp tôi thu hẹp vấn đề tương tự của tôi.
Gaʀʀʏ

Thật vậy - trong trường hợp của tôi, thuộc tính không được gửi lại từ chế độ xem cho bộ điều khiển, vì vậy nó luôn là 0 (không phải là id hợp lệ, nhưng bộ điều khiển sẽ không có cách nào để biết điều đó.)
neminem

1
Alt + F1 là lối tắt cho sp_help, đối với người đọc tương lai, chọn bảng và nhấn alt + f1
satsvelke

133

Tôi đã có vấn đề này bản thân mình, liên quan đến thông báo lỗi nhận được khi cố gắng điền vào trường khóa ngoại. Tôi đã kết thúc trên trang này với hy vọng tìm thấy câu trả lời. Câu trả lời được kiểm tra trên trang này thực sự là câu trả lời đúng, thật không may, tôi cảm thấy rằng câu trả lời là một chút không đầy đủ cho những người không quen thuộc với SQL. Tôi khá có khả năng viết mã nhưng các truy vấn SQL là mới đối với tôi cũng như xây dựng các bảng cơ sở dữ liệu.

Mặc dù câu trả lời được kiểm tra là chính xác:

Mike M đã viết-

"Cách một FK hoạt động là nó không thể có một giá trị trong cột đó mà cũng không nằm trong cột khóa chính của bảng được tham chiếu."

Điều còn thiếu từ câu trả lời này chỉ đơn giản là;

Bạn phải xây dựng bảng chứa Khóa chính trước.

Một cách khác để nói nó là;

Bạn phải Chèn Dữ liệu vào bảng cha, chứa Khóa chính, trước khi thử chèn dữ liệu vào bảng con có chứa Khóa ngoài.

Nói tóm lại, nhiều hướng dẫn dường như đang chú ý đến thực tế này để nếu bạn tự mình thử và không nhận ra có một lệnh hoạt động, thì bạn sẽ gặp lỗi này. Đương nhiên sau khi thêm dữ liệu khóa chính, dữ liệu khóa ngoài của bạn trong bảng con phải tuân theo trường khóa chính trong bảng cha, nếu không, bạn vẫn sẽ gặp lỗi này.

Nếu ai đọc xuống đây xa. Tôi hy vọng điều này đã giúp làm cho câu trả lời được kiểm tra rõ ràng hơn. Tôi biết có một số bạn có thể cảm thấy rằng điều này khá đơn giản và việc mở một cuốn sách sẽ trả lời câu hỏi này trước khi nó được đăng, nhưng sự thật là không phải ai cũng học theo cách tương tự.


ANd tôi sẽ thêm, đảm bảo lập hồ sơ truy vấn của bạn vì nó không phải lúc nào cũng gửi những gì bạn nghĩ nó nên đến cơ sở dữ liệu.
HLGEM

20

Bạn đang cố gắng chèn một bản ghi có giá trị trong cột khóa ngoại không tồn tại trong bảng ngoại.

Ví dụ: Nếu bạn có các bảng Sách và Tác giả trong đó Sách có ràng buộc khóa ngoại trên bảng Tác giả và bạn cố gắng chèn một bản ghi sách mà không có bản ghi tác giả.


16

Bạn sẽ cần phải đăng tuyên bố của bạn để làm rõ hơn. Nhưng...

Lỗi đó có nghĩa là bảng bạn đang chèn dữ liệu có mối quan hệ khóa ngoài với bảng khác. Trước khi dữ liệu có thể được chèn, giá trị trong trường khóa ngoài phải tồn tại trong bảng khác trước.


5

Vấn đề không nằm ở client_id từ những gì tôi có thể thấy. Có vẻ như vấn đề xảy ra với cột thứ 4, sup_item_cat_id

Tôi sẽ chạy

sp_helpconstraint sup_item

và chú ý đến cột ràng buộc được trả về cho khóa ngoại FK_Sup_Item_Sup_Item_Cat để xác nhận cột nào là vấn đề thực sự, nhưng tôi khá chắc chắn đó không phải là vấn đề bạn đang cố gắng khắc phục. Bên cạnh đó, '123123' cũng có vẻ đáng ngờ.


5

Một cái gì đó tôi tìm thấy là tất cả các lĩnh vực phải khớp chính xác.

Ví dụ: gửi 'chó mèo' không giống như gửi 'chó mèo'.

Những gì tôi đã làm để khắc phục sự cố này là loại bỏ mã FK từ bảng tôi đang chèn dữ liệu vào, lưu ý "Khóa ngoài" có các ràng buộc (trong trường hợp của tôi có 2) và đảm bảo 2 giá trị trường đó khớp với nhau Chính xác như họ đã ở trong bảng đang ném lỗi ràng buộc FK.

Khi tôi sửa 2 trường cho vấn đề của mình, cuộc sống rất tốt!

Nếu bạn cần một lời giải thích tốt hơn, cho tôi biết.


Điều này thực sự giúp tôi haha! Bỏ qua thực tế này, đã khắc phục một vấn đề tôi có! Cảm ơn bạn
Johnathan Brown

4

Tôi cũng gặp lỗi tương tự trong Mã SQL của mình, Giải pháp này hoạt động với tôi,


Kiểm tra dữ liệu trong Bảng chính Có thể bạn đang nhập một giá trị cột không có trong cột khóa chính.


3

Nó có nghĩa chính xác những gì nó nói. Bạn đang cố gắng chèn một giá trị vào một cột có ràng buộc FK trên đó không khớp với bất kỳ giá trị nào trong bảng tra cứu.


2

Kiểm tra kỹ các trường trong mối quan hệ, khóa ngoại được xác định cho. SQL Server Management Studio có thể không có các trường bạn muốn chọn khi bạn xác định mối quan hệ. Điều này đã đốt cháy tôi trong quá khứ.


2
  1. chạy sp_helpconstraint
  2. trả ATTENTION cho cột ràng buộc được trả về cho khóa ngoại

2

Thiếu dữ liệu bảng cha mẹ gây ra vấn đề. Trong vấn đề của bạn không có sẵn dữ liệu trong "dbo.Sup_Item_Cat" gây ra sự cố


1

Tôi gặp vấn đề tương tự khi tôi sử dụng các lần di chuyển mã đầu tiên để xây dựng cơ sở dữ liệu của mình cho ứng dụng MVC 5. Cuối cùng tôi đã tìm thấy phương thức seed trong tệp configure.cs của mình gây ra sự cố. Phương pháp hạt giống của tôi là tạo một mục nhập bảng cho bảng chứa khóa ngoại trước khi tạo mục nhập với khóa chính phù hợp.


1

Tôi gặp vấn đề này khi các trường giá trị chèn của tôi chứa các tab và khoảng trắng không rõ ràng bằng mắt thường. Tôi đã tạo danh sách giá trị của mình trong Excel, sao chép và dán nó vào SQL và chạy các truy vấn để tìm các kết quả không khớp trên các trường FK của tôi.

Các truy vấn khớp không phát hiện thấy có các tab và khoảng trắng trong trường FK của tôi, nhưng INSERT đã nhận ra chúng và nó tiếp tục phát sinh lỗi.

Tôi đã kiểm tra lại bằng cách sao chép nội dung của trường FK trong một bản ghi và dán nó vào truy vấn chèn. Khi bản ghi đó cũng thất bại, tôi nhìn kỹ vào dữ liệu và cuối cùng đã phát hiện ra các tab / dấu cách.

Khi tôi xóa các tab / dấu cách bị xóa, vấn đề của tôi đã được giải quyết. Hy vọng điều này sẽ giúp được ai đó!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.