我有两个名为VisitorMaster
and的表SupportVisitor
。在VisitorMaster
我有一个称为VisitorID1
主键的列(但不是标识列)。在SupportVisitor
我有一个称为VisitorID2
表的外键的列。VisitorMaser
但我的要求是我希望将最后生成的列值VisitorID1
插入到VisitorID2
表SupportVisitor
中。如何实现这一点..请帮助?
问问题
69 次
2 回答
1
我认为您最好的选择是确保您使用事务将您的表包装INSERT
到VisitorMaster
表中,并且在事务中您获得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 回答