SQL Server 2012 識別列差距:故障排除與解決方案
SQL Server 2012 的自動遞增識別列有時會表現出意外的行為,跳過值,例如,在第七次插入時從 6 直接跳到 1000。 本文探討了根本原因並提供了有效的解決方案。
理解問題
不規則增量行為源自於 SQL Server 2012 引入了用於識別值產生的序列。 此變更會影響身分密鑰的分配方式:
解決問題
有幾種方法可以解決此問題並確保連續的識別列增量:
方法一:停用快取
要恢復 2012 年之前的行為,請使用以下命令停用快取:
<code class="language-sql">ALTER DATABASE [YourDatabase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO ALTER TABLE [TableWithIdentity] ADD PRIMARY KEY ([ColumnName]) WITH (IDENTITY(1, 1)); GO ALTER DATABASE [YourDatabase] SET MULTI_USER;</code>
方法 2:利用追蹤標誌 272
啟用追蹤標誌 272 來監視每個產生的身分值。 這種詳細的日誌記錄可以找出序列快取機制的問題。
方法 3:使用 NO CACHE
序列
建立一個明確配置的序列產生器,無需快取 (NO CACHE
)。這保證了嚴格的順序增量,防止間隙出現。
<code class="language-sql">CREATE SEQUENCE [YourSequenceName] AS INT START WITH 1 INCREMENT BY 1 NO CACHE; ALTER TABLE [TableWithIdentity] ADD PRIMARY KEY ([ColumnName]) WITH (IDENTITY(1, 1)); GO</code>
透過實作這些解決方案,您可以維持 SQL Server 2012 識別列的預期行為,防止資料不一致和間隙。
以上是為什麼 My SQL Server 2012 識別列會跳過值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!