2012-02-08 34 views
6

Tôi có hai bảng được xây dựng như thế này (đây chỉ là một ví dụ đơn giản và không độc quyền):Thêm khóa ngoại có thể vô hiệu.

Person Table 
----------- 
p_Id, f_name, l_name 

Job Table 
---------- 
job_Id, job_desc 

Tôi muốn thêm một cột chính nước ngoài, Persons.job_Id, đó có thể là nullable rằng tài liệu tham khảo công việc. job_Id (PK) Lý do là, công việc có thể không được biết trước, vì vậy nó có thể là null. Có một "khác" không phải là một lựa chọn.

Tôi đã có điều này cho đến nay nhưng tôi nhận được "không thể tạo ràng buộc".

ALTER TABLE dbo.Person 
ADD job_Id INT FOREIGN KEY (job_Id) REFERENCES dbo.Job(job_Id) 

Xin cảm ơn trước.

+0

Làm kiểu dữ liệu của các trận đấu 2 cột? –

+0

Họ cần phải.Job_Id là một cột Identity của ints tuần tự. – Yatrix

+0

Bất cứ ai cũng quan tâm đến lý do tại sao họ downvoted vì vậy tôi có thể thay đổi câu hỏi để làm cho nó tốt hơn và/hoặc học hỏi từ sai lầm của tôi? – Yatrix

Trả lời

12

Hãy thử nó theo hai bước:

ALTER TABLE dbo.Person ADD job_Id INT NULL; 
ALTER TABLE dbo.Person ADD CONSTRAINT FL_JOB 
FOREIGN KEY (job_Id) REFERENCES dbo.Job(job_Id); 
+6

'ALTER TABLE dbo.Person ADD job_Id INT NULL, CONSTRAINT FL_JOB NGOẠI PHÍ (job_Id) TÀI LIỆU THAM KHẢO dbo.Job (job_Id);' cũng hoạt động quá để làm điều đó trong một câu lệnh. –

+1

@MartinSmith: đúng, tôi là một ngôi trường cũ trong những điều này và thực sự thích làm chúng cùng một lúc, nhưng cũng rất tốt để làm điều đó. – Mithrandir

+0

Vì vậy, tôi đã tạo bảng Công việc ban đầu và sau đó phải tạo lại nó. Khi tôi tạo lại nó, tôi quên tạo khóa chính ... chết tiệt. Cảm ơn vì sự giúp đỡ, tất cả. – Yatrix

8

Hãy thử nó như thế này, VỚI nocheck:

ALTER TABLE dbo.Person ADD job_Id INT NULL; 
ALTER TABLE dbo.Person WITH NOCHECK ADD CONSTRAINT FL_JOB 
FOREIGN KEY (job_Id) REFERENCES dbo.Job(job_Id); 
+0

WITH NOCHECK giúp khi Foreign Key có thể là NULL –

+0

Nhìn vào [answer] (http://stackoverflow.com/a/1338565/755977), có vẻ như có thể có hiệu ứng phụ. Điều này có bắt buộc không? – PhilDulac

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