簡體   English   中英

IDENTITY SEED 基於其他表種子值遞增

[英]IDENTITY SEED is incrementing based on other tables seed values

我正在使用 SQL SERVER 2017 和 SSMS 2018。我創建了一些主鍵為int並啟用Is Identity的表,並設置Identity Increment = 1 和 Identity Seed=1對於我使用相同方法的所有表。 但是當我在表中添加一條記錄時說Lead它的ID2 ,然后將值添加到表中說Followup然后它的ID3 在這里我添加屏幕截圖以便更好地理解

鉛表鉛表

跟進表跟進表

有什么辦法可以避免這種情況嗎? 我們可以為每張桌子保留身份嗎?

文檔非常具體地說明了identity不能保證的內容:

列上的標識屬性不保證以下內容:

  • 值的唯一性 . .

  • 事務中的連續值 . .

  • 服務器重新啟動或其他故障后的連續值 . .

  • 重用價值

一般來說,“唯一性”屬性不是問題,因為標識列通常是主鍵(或通常至少聲明為unique性),這確實保證了唯一性。

identity列的目的是提供一個不同於其他行的唯一數字標識符,因此它可以很容易地用作主鍵。 沒有其他保證。 並且為了性能 SQL 服務器有許多導致差距的捷徑。

如果您不希望有任何間隙,那么最簡單的方法是在查詢時分配一個值:

row_number() over (order by <identity column>)

這不是 100% 令人滿意,因為刪除會影響值。 我還認為在並行系統上,插入也可以(因為身份可能緩存在各個節點上)。

如果您不關心性能,則可以使用sequence來分配值。 這比使用identity的性能要差。 基本上,它需要序列化所有的插入來保證插入的屬性。

我應該注意,即使有一個序列,失敗的插入仍然會產生間隙,所以它仍然可能無法達到你想要的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM