[英]Identity auto jumping in SQL Server LocalDb
據我所知,我有一個 C# 應用程序並使用 SQL Server LocalDb 數據庫。
有一次我將我的數據庫附加到 SQL Server 2012,然后將其分離。 現在我的一個用戶告訴我表id從36跳到1036。之后我再次將用戶數據庫更改為new,它從2跳到1003。
我看到了很多解決這個問題的方法,但我的老用戶沒有像他們有舊版本和數據庫那樣的問題。 我的新用戶也有這個問題,他們的系統上沒有 SQL Server 2012,只有 LocalDb。
你認為如果我刪除整個數據庫並從 C# 中創建一個新數據庫,它對我有幫助嗎?
導致此 id 差距的原因可能還有其他一些,可能是由於安裝更新后服務器自動重啟。
您可以使用以下兩種選擇
使用跟蹤標志 272 o 這將導致為每個生成的標識值生成日志記錄。 打開此跟蹤標志可能會影響身份生成的性能。 使用帶有 NO CACHE 設置的序列生成器
在此處期望的 SQL Server 2012 上設置跟蹤標志 272
打開“SQL Server 配置管理器”
可能有以下 2 種情況....
你是否每次跳轉 1000 次(我的意思是你插入的每條記錄)然后你去設計表並檢查“Identity Increment”和“Identity Seed”都應該是 1。
如果你在某個時候得到這個跳轉(一些隨機數),那么你試圖在表中插入記錄但它失敗了,所以對於每個失敗的插入,標識值將增加 1。
謝謝拉維
這就是 SQL Server 現在的工作方式。 它在開始時為每個表保留 1000 個 ID 的池。 關閉時未使用的任何保留標識都將被丟棄,並在啟動時保留一個新的 id 池。
如果您確實需要順序身份,您可以創建一個身份表,您可以在其中控制生成的 id。 這不是最漂亮或最可取的方式,但可以讓您更好地控制身份。 一個好處是它為您提供了一些有趣的身份生成功能。 例如,假設您需要生成一個增量數字,從每年每個客戶的 1 開始,然后您使用身份表。
PS:身份表是一個簡單的表,每個 id 有一行和一列。 對於Customer
表,有一個CustomerIdentity
表,您可以在其中存儲最新的 ID。 id 生成是通過使用 update 語句手動完成的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.