Внешние ключи SQL Server 2008, которые автоматически индексируются - PullRequest
2 голосов
/ 19 февраля 2012

Внешние ключи в SQL Server 2008 автоматически индексируются со значением?Например.Если я добавлю значение в свой первичный ключ (или автоинкремент) в родительскую таблицу, будет ли таблица с внешним ключом, на которую ссылается этот ключ, автоматически иметь такое же значение?Или я должен сделать это явно?

1 Ответ

6 голосов
/ 19 февраля 2012

Нет, если вы создаете внешний ключ в дочерней таблице, он не будет автоматически заполняться при вставке родительской строки. Если вы думаете об этом, это имеет смысл. Допустим, у вас есть таблица типа:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...