SQL Server LocalDb中的标识自动跳转

时间:2016-04-06 10:56:05

标签: c# sql-server

我有一个C#应用程序并使用我知道的SQL Server LocalDb数据库。

有一次我将数据库附加到SQL Server 2012,然后将其分离。现在,我的一位用户告诉我,表格id从36跳到1036.之后我再次将用户数据库更改为新数据,它从2跳到1003。

我看到了很多这个问题的解决方案,但是对于我的旧用户我没有这个问题,他们有旧版本和数据库。我的新用户也有这个问题,他们在系统上没有SQL Server 2012,只有LocalDb。

你认为如果我删除整个数据库并从C#创建新数据库它可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

此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. 确认更改

答案 1 :(得分:0)

下面可能有两种情况......

  1. 你是每次1000跳(我的意思是你插入的每一条记录)然后你去设计表并检查"身份增量"和#34;身份种子"两者都应该是1。

  2. 如果你有时候跳转(一些随机数),那么你试图在表中插入记录但是它失败了,所以对于每个失败插入,身份值将增加1。

  3. 由于 拉维

答案 2 :(得分:0)

这就是SQL Server现在的工作方式。它在开始时为每个表保留一个1000个ID的池。关闭时未使用的任何保留标识都将被丢弃,并在启动时保留一个新的ID池。

如果您确实需要顺序标识,则可以创建一个标识表来控制生成的ID。它不是最漂亮或最好的方式,但可以让你更好地控制身份。一个好处是它为您提供了一些有趣的身份生成功能。例如,考虑您需要为每个客户生成一个增量编号,从每年1开始,然后使用标识表。

PS:标识表是一个简单的表,每个id有一行和一列。 对于Customer表,有一个CustomerIdentity表,用于存储最新的id。 id生成是使用update语句手动完成的。