2012-01-31 41 views
0

我有一个表,Contacts,主键为ContactID,这是一个标识列。我有另一个表Person,主键为PersonID,这是ContactID的外键。当我在Person中插入记录时,我想PersonID从中提取相应标识Contact更新SQLServer中的外键,如Access

在Access中,我只需创建一个引用这两个表的查询,然后它将使用identity(autonumber)列中的相应值填充外键列。

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);

我们怎样才能在2008年的SQLServer R2实现这一目标?我一直在编程触发器来更新密钥,但似乎应该有更好的方法。

非常感谢您的协助。

回答

0

当您插入到第一个表中时,您使用OUTPUT子句来拉取标识值,然后可以使用它插入到子表中。

您也可以使用scope_identity()来做同样的事情,但OUTPUT是首选的方法。请勿在任何情况下使用@@Identity,因为它通常会给出不正确的结果并且会破坏数据的完整性。

查看如何在联机丛书中使用它们。

+0

让我们在我的问题中将查询定义为'qPerson'。在Access中,如果我只是使用'INSERT INTO qPerson(FirstName,LastName,PhoneNumber)VALUES(“Bobort”,“Bogobin”,“N/A”)',键会自动填入。有没有办法在SQLServer中使用触发器或其他内置方法而不是使用'OUTPUT'子句来维护这种相同的简单语法? – Bobort 2012-02-02 15:06:11