Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动索引的SQL Server 2008外键_Sql_Sql Server 2008_Relationship - Fatal编程技术网

自动索引的SQL Server 2008外键

自动索引的SQL Server 2008外键,sql,sql-server-2008,relationship,Sql,Sql Server 2008,Relationship,SQL Server 2008中的外键是否自动使用值编制索引?例如如果我在may父表的主键(或自动递增键)中添加一个值,则具有外键引用的表是否会自动具有相同的值?或者我必须明确地这样做 否,如果在子表中创建外键,则插入父行时不会自动填充该外键。如果你仔细想想,这是有道理的。假设您有一张如下所示的桌子: CREATE TABLE dbo.Students ( StudentID INT IDENTITY(1,1) PRIMARY KEY, Name SYSNAME ); CREATE T

SQL Server 2008中的外键是否自动使用值编制索引?例如如果我在may父表的主键(或自动递增键)中添加一个值,则具有外键引用的表是否会自动具有相同的值?或者我必须明确地这样做

否,如果在子表中创建外键,则插入父行时不会自动填充该外键。如果你仔细想想,这是有道理的。假设您有一张如下所示的桌子:

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
);
您的建议是,当您向
学生
添加一行时,系统应自动向
学生贷款
添加一行-但是如果该学生没有贷款怎么办?如果学生确实有贷款,金额应该是多少?系统应该选择一个随机数吗

通常,在这种情况下,您将同时添加一名学生和他们的贷款。因此,如果你知道贷款金额和学生姓名,你可以说:

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;

那么,如何向引用子表中主键的外键添加值?例如,我添加了一名学生,在知道他有学生贷款的情况下,我如何将他/她的主键的值添加到学生贷款表中?**编辑**谢谢!顺便问一下,该查询在LINQtoSQL中工作吗?您是否尝试过该示例
SCOPE_IDENTITY()
是从最近插入的表中的
IDENTITY
列检索自动生成值的一种方法。如果您在两个不同的时间执行此操作,那么您需要找到您感兴趣的学生的PK(您如何识别他们?),然后在后续的insert语句中使用该值。我还没有尝试过范围标识it,该查询是否适用于LINQ to SQL?抱歉,我完全不知道,我不使用LINQ。您是否对这项技术进行了研究,并得出了应该使用它的合理结论?我怀疑如果您需要了解数据库,LINQ可能不是最好的方法。我明白了,虽然我们需要使用LINQ,但我认为我需要刷新有关数据库的内存。但不管怎样,这都是一个巨大的帮助。我理解为什么另一个表中的外键不应该递增。谢谢你@Aaron Bertrand