簡體   English   中英

SQL Server LocalDb 中的身份自動跳轉

[英]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 配置管理器”

  1. 單擊左側窗格中的“SQL Server 服務”
  2. 右鍵單擊右側窗格中的 SQL Server 實例名稱 -> 默認值:SQL Server(MSSQLSERVER)
  3. 點擊“屬性”
  4. 點擊“啟動參數”
  5. 在“指定啟動參數”文本框中鍵入“-T272”
  6. 點擊“添加”
  7. 確認更改

可能有以下 2 種情況....

  1. 你是否每次跳轉 1000 次(我的意思是你插入的每條記錄)然后你去設計表並檢查“Identity Increment”和“Identity Seed”都應該是 1。

  2. 如果你在某個時候得到這個跳轉(一些隨機數),那么你試圖在表中插入記錄但它失敗了,所以對於每個失敗的插入,標識值將增加 1。

謝謝拉維

這就是 SQL Server 現在的工作方式。 它在開始時為每個表保留 1000 個 ID 的池。 關閉時未使用的任何保留標識都將被丟棄,並在啟動時保留一個新的 id 池。

如果您確實需要順序身份,您可以創建一個身份表,您可以在其中控制生成的 id。 這不是最漂亮或最可取的方式,但可以讓您更好地控制身份。 一個好處是它為您提供了一些有趣的身份生成功能。 例如,假設您需要生成一個增量數字,從每年每個客戶的 1 開始,然后您使用身份表。

PS:身份表是一個簡單的表,每個 id 有一行和一列。 對於Customer表,有一個CustomerIdentity表,您可以在其中存儲最新的 ID。 id 生成是通過使用 update 語句手動完成的。

暫無
暫無

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

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