2012-01-18 13 views
0

私はデータベースを持っていますが、簡単にするために2つのテーブルがあります。 1つはEmployeeで、もう1つはEmployeeTypeです。データベースの図では、私はそれと間違っているかわからないSQLの関係エラー

'EmployeeType (HumanResources)' table saved successfully 
'Employee (HumanResources)' table 
- Unable to create relationship 'FK_Employee_EmployeeType'. 
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_Employee_EmployeeType". The conflict occurred in database "TheDB", table "HumanResources.EmployeeType", column 'iID'. 

....私は2つのテーブルの関係を構築しようとしていますが、それは私に、次のエラーが発生します。助けてください...

+5

すでにFKが定義されているようです。 –

+1

あなたは_read_このエラーになりましたか?むしろ明らかです。 – Oded

+1

これは、SSMS生成クエリからのエラーのように表示されます。 – Yuck

答えて

4

あまりにも多くのdownvotes。少なくとも、彼はエラーメッセージの投稿に気をつけた。ダニエルA.ホワイトが上記のように、あなたは既にあなたがしようとしている外来キーを持っている可能性があります。あなたのタグでは、SQL Server 2008を使用していると言われていますので、Microsoft SQL Server Management Studioを使用します。そのような場合、私が作った(そして時にはやっている)間違いは、外来キーを作成したいテーブルのデザインビューの列を右クリックして新しい関係を作成することですリレーションシップをヒットします。表示される[外部キーの関係]メニューでは、下部にある[追加]をクリックし、[テーブルと列の仕様]セクションを展開します。次に、関連するカラムを選択できる「テーブルとカラムの仕様」の横にある「...」をクリックします。

ここで私が時折遭遇する問題は、ここでこの関係を確定しなければ、このような状況のために自分自身を設定していることです。その理由は、いくつかのステップを「追加」すると、このテーブルにはすでに外部キーが作成されているからです。キャンセルしてすべてを終了しても、テーブルにはその外部キーが保持されます。あなたがこれを試してみたら、すでに誤って関係を作成しているかもしれません。

SQL Server 2008で作業を開始してから1年後の最初のプロジェクトを振り返ってみると、最初にこのミスを犯した頻度がわかりました。外資系の関係は面白いです。私が学んでいたときに私が明らかに実験していたすべてのテーブルのどこにあるのかを指している外部キーのエントリです。

もう1つのことは、データベースダイアグラムビューでこれを実行していると述べたことです。間違っているとは思わないが、私は時々GUIを使って作業をしていることが分かった。それは一種のものかもしれない。それで、私が意味するのは、ときどき私は本当に小さな変更を加えたいと思うかもしれませんが、GUIは、テーブルが作られた後に私がそのような変更を行うことができないことを教えてくれます。しかし、もし私がちょうど私が入力したクエリを使ってやりたいことをちょうど実行すれば、うまく動作します。

あなたが望む機能を持っているかどうかを調べる究極のテストは、外来キーの拘束に違反するレコードを入れることです。それが進むと、関係は存在しないか、適切に設定されていません。それが失敗すれば、あなたはすでにあなたが望むものを持っていることを知っています。

これは非常に複雑な問題ではないため、通常はGoogle、特に自分自身で簡単に解決できるはずですので、いくつかのダウンボートがあると思います。そうではありませんが、とにかく投稿するのが気になりましたが、私はあなたがこれに若干新しいと思っていますので、私は仲間の初心者として私のアドバイスを捨てたいと思っていました。 downvotesがあなたを落とさせないようにしてください。ちょうど次回は、何が間違っているのか、もう少し具体的な質問をお願いします。たとえば、「このエラーは、既にキーが存在していることを伝えているようですが、誰が関係を確認し、どのような関係が存在するかを教えてもらえますか?この関係を覚えていません。

+2

ありがとうございます。それが本当に助けになりました。そして、私は間違いなく新しい質問を投稿しながらあなたのアドバイスを覚えています。 – Cancer

1

単純な答え:この関係を壊す可能性のあるデータがテーブルにあるため、関係を作成できません。

この場合、Employeeテーブルをチェックして、EmployeeType(EmployeeTypeId?)のIDがNULLまたは不正(EmployeeTypeテーブルに見つかりません)の行を探します。これらの行を修正すれば、関係によってOKが保存されます。