2012-02-19 17 views
2

SQL Server 2008の外部キーは自動的に値でインデックスされますか?例えば。親テーブルのプライマリキー(または自動インクリメント)に値を追加すると、そのキーを参照する外部キーを持つテーブルは自動的に同じ値を持ちますか?または私はそれを明示的に行う必要がありますか?自動インデックスされるSQL Server 2008の外部キー

答えて

6

いいえ、子テーブルに外部キーを作成すると、親行が挿入されたときに外部キーが自動的に設定されません。これについて考えるなら理にかなっています。その学生がローンを持っていない場合はどのような -

CREATE TABLE dbo.Students 
(
    StudentID INT IDENTITY(1,1) PRIMARY KEY, 
    Name SYSNAME 
); 

CREATE TABLE dbo.StudentLoans 
(
    LoanID INT IDENTITY(1,1) PRIMARY KEY, 
    StudentID INT FOREIGN KEY REFERENCES dbo.Students(StudentID), 
    Amount BIGINT -- just being funny 
); 

何を示唆していることは、あなたがStudentsに行を追加する場合、システムが自動的にStudentLoansに行を追加する必要があることですさんは次のようにあなたがテーブルを持っているとしましょう?学生がローンを持っている場合、その金額はどのくらいですか?システムは乱数を選ぶべきですか?

通常、このシナリオでは、学生とそのローンを同時に追加することになります。したがって、貸し出し金額と学生の名前を知っているなら、次のように言うことができます:

DECLARE 
    @Name  SYSNAME = N'user962206', 
    @LoanAmount BIGINT = 50000, 
    @StudentID INT; 

INSERT dbo.Students(Name) 
    SELECT @Name; 

SELECT @StudentID = SCOPE_IDENTITY(); 

INSERT dbo.StudentLoans(StudentID, Amount) 
    SELECT @StudentID, @LoanAmount; 
+0

子テーブルの主キーを参照する外部キーにどのように値を追加しますか?私は学生を追加しました。学生ローンを持っていることを知っている学生ローンテーブルに、彼/彼女のプライマリキーの価値をどのように追加するのですか?**編集**ありがとう! btw LINQ To SQLでそのクエリが動作しますか? – user962206

+0

例を試しましたか? 'SCOPE_IDENTITY()'は、最近挿入されたテーブルの 'IDENTITY'カラムから自動生成された値を取得する方法の1つです。 2つの異なる時間にこれをやっているのであれば、興味のある学生のPKを見つけて(どのように識別していますか?)、その後の挿入ステートメントでその値を使用する必要があります。 –

+0

私はSCOPE_IDENTITYをまだ試していませんが、そのクエリはLINQ TO SQLに適用されますか? – user962206

関連する問題