2012-02-19 73 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

然後我如何將一個值添加到引用我的子表中的主鍵的外鍵?例如,我添加了一個學生,如何知道他有學生貸款,我怎麼將他/她的主鍵的值添加到學生貸款表?** EDITED **謝謝!順便說一句,該查詢工作在LINQ To SQL? – user962206 2012-02-19 01:45:27

+0

你試過這個例子嗎? 'SCOPE_IDENTITY()'是從最近插入的表中的'IDENTITY'列中檢索自動生成值的一種方法。如果你在兩個不同的時間這樣做,那麼你需要找到你感興趣的學生的PK(你如何識別它們?),然後在隨後的插入語句中使用該值。 – 2012-02-19 01:47:53

+0

我還沒有試過SCOPE_IDENTITY呢,這個查詢是否適用於LINQ TO SQL? – user962206 2012-02-19 01:48:50