繁体   English   中英

MS SQL在表中共享标识种子

[英]MS SQL share identity seed amongst tables

在MS SQL中,是否可以跨表共享身份种子? 例如,我可能有2个表:

表:PeopleA

  • ID
  • 名称

表:PeopleB

  • ID
  • 名称

我希望PeopleA.idPeopleB.id之间始终拥有独特的价值观。 即我希望他们共享相同的身份种子。

注意 :我不想听到表分区,只是关于是否可以在表之间共享种子。

原始答案

不,你不能,如果你想这样做,你的设计几乎肯定是有缺陷的。

当我在2010年写这篇文章时,这是真的。 但是,此时SQL Server现在具有可以执行OP想要执行的操作的序列。 虽然这可能无助于OP(他肯定早已解决了他的问题),但它可能有助于其他人寻求做同样的事情。 我仍然认为想要这样做通常是设计缺陷的标志,但现在可以开箱即用。

不,但我猜你可以在一张桌子上创建一个IDENTITY(1,2),在另一张桌子上创建一个IDENTITY(2,2)。 但它并不是一个非常强大的设计。

您是否可以将您的实体称为'A1','A2',......如果它们来自TableA和'B1','B2'等......如果它们来自TableB? 然后就不可能得到重复。 显然,您实际上并不需要将A和B存储在数据库中,因为它是隐含的。

不确定您的设计是什么,但有时使用继承类型模型是有用的,其中您有一个基表,然后是具有显着不同属性的子表,例如:

Person
------
PersonID <-- PK, autoincrement
FirstName
LastName
Address1
...

Employee
--------
PersonID <-- PK (not autoincrement), FK to Person
JobRoleID
StartDate
Photo
...

Associate
---------
PersonID <-- PK (not autoincrement), FK to Person
AssociateBranchID
EngagementTypeID
...

在这种情况下,您将基值插入Person,然后使用生成的PersonID插入Employee或Associate表。

如果你真的需要这个,创建第​​三个表PeopleMaster,其中存在标识(1,1),使另外两个表只有int FKs到这个标识值。 插入PeopleMaster,然后插入PeopleA或PeopleB。

我真的认为这是一个糟糕的设计。 使用PeopleType标志(“A”或“B”)创建一个表并包含所有公共列,并在必要时创建子表(对于PeopleA和PeopleB之间的任何不同列)

没有。

但我曾参与过使用类似概念的项目。 在我的情况下,我们所做的是有一个名为[MasterIdentity]的表,它有一列[Id] (身份种子)。 数据库中没有其他表具有任何具有标识种子的列,并且当需要标识时,调用函数/存储过程以将值插入[MasterIdentity]表并返回种子。

不,SQL Server没有内置任何功能。

显然有一些解决方法,例如使用FK关系到一个表,它具有单个IDENTITY并具有一些奇特的约束或触发器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM