簡體   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