将主键列值分配给外键列

时间:2013-04-05 08:11:21

标签: sql-server

我有两个名为VisitorMasterSupportVisitor的表。 在VisitorMaster中,我有一个名为VisitorID1的列,它是主键(但不是标识列)。 在SupportVisitor中,我有一个名为VisitorID2的列,它充当VisitorMaser表的外键。但我的要求是我希望最后生成的列值VisitorID1为插入VisitorID2 SupportVisitor表的{{1}}。 如何实现这个.. 请帮助??

2 个答案:

答案 0 :(得分:1)

我认为您最好的选择是确保将INSERT用事务包装到VisitorMaster表中,并在事务中使用VisitorID获取值SupportVisitor您提交的数据用于查询,最后在提交或回滚批次之前将其放入SCOPE_IDENTITY

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

最终虽然我会问你为什么在一栏中有非身份代理PK?这是一个非常糟糕的设计。使用自然键(forename,surname,timestamp或任何使用自然唯一键的组合)或使用自动递增标识字段作为代理PK(然后你可以使用{{1}因为否则你的密钥非常不稳定而且不能保证是唯一的。你是如何产生这个价值的?它是否保存在一个单独的表中(我知道有些数据库使用这种系统,尤其是EAV模型数据库,它不是一个好的系统,无论形状或形式如何,并且比任意值更难处理)?如果你对这个设计有任何影响,那么你应该改变它,因为它闻起来很可能会在未来引起很多问题。

答案 1 :(得分:0)

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

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

SELECT SCOPE_IDENTITY() -- Will retrieve ID for Jane Doe