假设我有 3 个如下表:
Person
PersonId INT [PK,唯一集群 idx,身份是]
PersonName VARCHAR(50) [非空]
ContactId INT [唯一非集群 idx,非空,FK 到联系人表的 ContactId 列]
Company
CompanyId INT [PK,唯一集群 idx,身份是]
CompanyName VARCHAR(100) [非空]
ContactId INT [唯一非集群 idx,非空,FK 到联系人表的 ContactId 列]
Contact
ContactId INT [PK,唯一集群 idx,身份是]
CreatedDate DATETIME [非空,默认值 getdate()]
我将在以下 3 个插入操作中显示所需的最终结果(从所有空表开始)...
我在 Person 中插入一行,并希望得到:
人员表-
PersonId 1
PersonName 'First Person'
ContactId 1
联系人表-
ContactId 1
CreatedDate getdate() 值
然后我在 Company 中插入一行,并希望得到:
公司表- CompanyId 1
CompanyName 'First Company'
ContactId 2
联系人表- ContactId 2
CreatedDate getdate() 值
我在 Person 中插入第二行,并希望得到:
人员表- PersonId 2
PersonName 'Second Person'
ContactId 3
联系人表- ContactId 3
CreatedDate getdate() 值
我希望以上说明我想要完成什么,即我想使用 Contact 表作为一种“唯一值生成器”类型的机制,可以这么说,以便任何时候我在 Person 或 Company 中插入一行(或我想将类似的 ContactId 列放入的任何其他表),任何/所有这些表中的每个 ContactId 值都是唯一的。
实现这一目标的最有效方法是什么?是否可以使用 Person 和 Company 表上的触发器来执行此操作,以便我只能从我的应用程序代码中执行一次插入操作(如果可以,触发器代码会是什么样子)?或者我是否总是必须从我的应用程序代码中执行多个 I/O 操作,其中我首先向 Contact 表插入一行,取回 scope_identity() 值,然后将该值用于插入到 Person 的 ContactId 值或公司?还是其他一些比其中任何一种更好的方法?
非常感谢任何见解!