0

我有两个名为VisitorMasterand的表SupportVisitor。在VisitorMaster我有一个称为VisitorID1主键的列(但不是标识列)。在SupportVisitor我有一个称为VisitorID2表的外键的列。VisitorMaser但我的要求是我希望将最后生成的列值VisitorID1插入到VisitorID2SupportVisitor中。如何实现这一点..请帮助?

4

2 回答 2

1

我认为您最好的选择是确保您使用事务将您的表包装INSERTVisitorMaster表中,并且在事务中您获得VisitorID使用您插入的数据来查询它并最终SupportVisitor在提交之前将其放入的价值或回滚很多。

您可以使用触发器来执行此操作,但触发器是令人讨厌的事情,可能会产生各种意想不到的后果,因为它或多或少是无形的,所以我会避开它们。

最终,尽管我会问为什么您在一列中有一个非身份代理 PK?这是一个非常糟糕的设计。要么使用自然键(名字、姓氏、时间戳的组合或任何构成自然唯一键的组合),要么使用自动递增的身份字段作为代理 PK(然后您可以使用SCOPE_IDENTITY) 因为否则您的密钥非常不稳定,并且不能保证是唯一的。你是如何产生这个价值的?它是否保存在单独的表中(我知道一些数据库使用这种系统,尤其是 EAV 模型数据库,它在任何形状或形式上都不是一个好的系统,并且比任意值更容易处理)? 如果你对这个设计有任何影响,那么你应该改变它,因为它闻起来很臭,而且很可能在未来给你带来很多很多问题。

于 2013-04-05T09:12:25.243 回答
0

将记录插入到具有 IDENTITY 列的表中后,您可以通过选择范围标识来检索此行的数字标识:

INSERT INTO VisitorMaster (Name) VALUES ('Jane doe')

SELECT SCOPE_IDENTITY() -- Will retrieve ID for Jane Doe
于 2013-04-05T08:17:09.360 回答