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