2012-02-08 28 views
6

Böyle inşa iki tablo (bu sadece basitleştirilmiş ve ticari olmayan bir örneğidir) vardır:Bir null olmayan yabancı anahtar ekleme.

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

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

O referanslar Meslek null olabilen bir yabancı anahtar sütunu, Persons.job_Id, eklemek istiyorum. job_Id (PK) Nedeni, iş önceden bilinemeyebilir, bu yüzden boş olabilir. "Diğer" olmak bir seçenek değildir.

Şimdiye kadar yapmıştım ama "kısıtlama yaratmadı" alıyorum.

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

Şimdiden teşekkürler.

+0

2 sütun maçın veri türlerini mı? –

+0

Onlar gerekir. Job_Id sıralı inters bir Kimlik sütunudur. – Yatrix

+0

Herkes neden reddedildiğini söylese de soruyu daha iyi hale getirmek ve/veya benim hatamdan öğrenmek için değiştirebilir miyim? – Yatrix

cevap

12

iki adımda Deneyin:

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 YABANCI ANAHTAR (job_Id) REFERANSLAR dbo.Job (job_Id);' tek bir ifadede bunu yapmak için de çalışır. –

+1

@MartinSmith: Doğru, bu şeylerde biraz eski bir okulum ve onları her seferinde bir tane yapmaktan gerçekten çok hoşlanıyorum ama onun da bunu yapmak çok iyi. – Mithrandir

+0

Bu yüzden, İş tablosunu orijinal olarak oluşturdum ve yeniden oluşturmam gerekiyordu. Onu yeniden yarattığımda, birincil anahtarı yaratmayı unuttum ... kahretsin. Yardımın için teşekkürler. – Yatrix

8

böyle deneyin, nocheck İLE:

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

NOCHECK İLE WITH Foreign Key NULL olabilir –

+0

Bu [yanıt] (http://stackoverflow.com/a/1338565/755977) bakın, performans yan etkileri olabilir gibi görünüyor. Bu zorunlu mu? – PhilDulac

İlgili konular