22

Tôi muốn có khóa ngoài giữa 2 bảng, vì vậy tôi thử nó như tôi luôn làm. Bây giờ vấn đề tôi đang gặp là anh ta không tạo ra, và bởi vẻ ngoài của nó nó không tạo ra bởi vì đã có một chìa khóa nhưng không có.Phím nước ngoài không thể tạo

- Unable to create relationship 
'FK_tbl_Paramed_RegistratieBehandelingen_Users'. 
    The ALTER TABLE statement conflicted with the 
    FOREIGN KEY constraint "FK_tbl_Paramed_RegistratieBehandelingen_Users". 
    The conflict occurred in database "Nestor_Server", 
    table "dbo.Users", column 'UserID'. 

Ive kiểm tra nếu họ có cùng loại, họ làm (bigint) do đó, không hiểu tại sao anh ta sẽ không tạo ra nó

Trả lời

48

Có thể là bạn có số liệu trong RegistratieBehandelingen (Không chắc về tên bảng) không có trong Bảng Người dùng.

select * from RegistratieBehandelingen a where UserID IS NULL or 
not exists (select 1 from Users b where b.UserID= a.UserID) 
+1

Có một giá trị null bị trượt trought lưới có vẻ như đó là lý do tại sao nó giữ trên thất bại. Cảm ơn bạn –

+0

Chính xác .. Tôi vừa gặp sự cố tương tự. Để kiểm tra xem đây có phải là trường hợp không, hãy thử tạo khóa ngoài bằng cách sử dụng "NO CHECK". Thao tác này sẽ tạo khóa nhưng sẽ không bị xóa nếu dữ liệu hiện tại không khớp với quy tắc khóa ngoài chính xác mà bạn đang cố gắng tạo. –

11

Điều này có nghĩa là bạn có dữ liệu con không có ID mẹ phù hợp.

Run sau để xem nếu bạn nhận được bất kỳ kết quả:

SELECT * 
FROM tbl_Paramed_RegistratieBehandelingen r 
LEFT JOIN Users u on r.UserID = u.UserID 
WHERE u.UserID IS NULL 

(thay đổi bảng và tên cột nếu phù hợp)

Nếu bạn nhận được bất kỳ kết quả sau đó nó sẽ hiển thị trong đó ghi chứa userIds rằng don không khớp với Người dùng.

0

Sau truy vấn trên, bạn có thể muốn xóa UserId không tồn tại khỏi bảng tbl_Paramed_RegistratieBehandelingen hoặc chèn chúng vào bảng Người dùng.