2012-02-08 22 views
6

私はこのように構築された2つのテーブルを(これは単なる簡略化および非独占の例です)があります。null可能な外部キーの追加。

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

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

私はその参照の仕事NULL可能することができ、外部キー列、Persons.job_Idを、追加したいです。 job_Id(PK)理由は、ジョブが事前に分かっていない可能性があるため、nullになる可能性があるからです。 「その他」はオプションではありません。

私はこれまでこれを持っていましたが、私は "制約を作成できませんでした"。

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

ありがとうございます。

+0

は、2列の試合のデータ型をしますか? –

+0

これは必要です.Job_Idは、順次intのIdentity列です。 – Yatrix

+0

誰もがなぜ彼らはdownvotedので、私はそれを改善するために質問を変更することができる/または私の間違いから学ぶために言うように気をつけますか? – Yatrix

答えて

12

2つの段階でそれを試してみてください。

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 FOREIGN KEY(job_Id)REFERENCES dbo.Job(job_Id);は1つのステートメントでこれを実行します。 –

+1

@ MartinsSmith:そうですね、私はこれらのことに少し古い学校であり、一度に1つずつ行うのが本当に好きですが、彼もそれをやるのはとても良いです。 – Mithrandir

+0

そのため、元々ジョブテーブルを作成してから再作成する必要がありました。私がそれを再現したとき、私は主キーを作成するのを忘れていた。助けてくれてありがとう、すべて。 – Yatrix

8

は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は、外部キーがNULLになる可能性がある場合に役立ちます。 –

+0

この回答を見る(http://stackoverflow.com/a/1338565/755977)、パフォーマンス上の副作用があるようです。これは必須ですか? – PhilDulac

関連する問題