1

假设我有 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 值或公司?还是其他一些比其中任何一种更好的方法?

非常感谢任何见解!

4

1 回答 1

0

您需要为您的contactId 有一个序列,并根据触发器从contactId 的序列中插入值

于 2013-02-15T13:36:03.183 回答