0

У меня есть таблица Contacts с первичным ключом ContactID, который является столбцом идентификации. У меня есть другая таблица, Person, с первичным ключом PersonID, который является внешним ключом ContactID. Когда я вставляю запись в Person, я хотел бы PersonID вытащить соответствующую идентификационную информацию от ContactID в Contact.Обновление внешних ключей в SQLServer, например Access

В Access я просто делаю запрос, который ссылается на обе таблицы, и он заполняет столбец внешнего ключа соответствующим значением в столбце идентификации (автономера).

SELECT Person.PersonID, Person.FirstName, Person.MiddleName, Person.LastName, Contact.ContactID, Contact.EmailAddress, Contact.PhoneNumber FROM (Contact INNER JOIN Person ON Contact.ContactID = Person.PersonID);

Как мы можем добиться этого в SQLServer 2008 R2? Я программировал триггеры для обновления ключей, но кажется, что должен быть лучший способ.

Большое спасибо за помощь.

ответ

0

Когда вы вставляете в первую таблицу, вы используете предложение OUTPUT, чтобы вытащить значение идентификатора, а затем вы можете использовать его для вставки в дочернюю таблицу.

Вы также можете использовать scope_identity(), чтобы сделать то же самое, но ВЫХОД - предпочтительный метод. Ни при каких обстоятельствах не используйте @@Identity, так как он часто дает неверные результаты и испортит целостность данных.

Посмотрите, как их использовать в электронной документации.

+0

Определим запрос в моем вопросе как 'qPerson'. В Access, если бы я просто использовал 'INSERT INTO qPerson (FirstName, LastName, PhoneNumber) VALUES (« Bobort »,« Bogobin »,« N/A »)', ключи были бы автоматически заполнены. Есть ли способ для поддержания этого же простого синтаксиса в SQLServer с использованием триггеров или некоторых других встроенных средств вместо использования предложения 'OUTPUT'? – Bobort