我有一个C#应用程序并使用我知道的SQL Server LocalDb数据库。
有一次我将数据库附加到SQL Server 2012,然后将其分离。现在,我的一位用户告诉我,表格id从36跳到1036.之后我再次将用户数据库更改为新数据,它从2跳到1003。
我看到了很多这个问题的解决方案,但是对于我的旧用户我没有这个问题,他们有旧版本和数据库。我的新用户也有这个问题,他们在系统上没有SQL Server 2012,只有LocalDb。
你认为如果我删除整个数据库并从C#创建新数据库它可以帮助我吗?
答案 0 :(得分:0)
此ID间隔可能还有其他原因,可能是因为安装更新后服务器自动重启。
您可以使用以下两个选项
使用跟踪标志272 o这将导致为每个生成的标识值生成日志记录。打开此跟踪标志可能会影响身份生成的性能。 使用具有NO CACHE设置的序列生成器
在SQL Server 2012上设置您期望的跟踪标志272
打开“SQL Server配置管理器”
答案 1 :(得分:0)
下面可能有两种情况......
你是每次1000跳(我的意思是你插入的每一条记录)然后你去设计表并检查"身份增量"和#34;身份种子"两者都应该是1。
如果你有时候跳转(一些随机数),那么你试图在表中插入记录但是它失败了,所以对于每个失败插入,身份值将增加1。
由于 拉维
答案 2 :(得分:0)
这就是SQL Server现在的工作方式。它在开始时为每个表保留一个1000个ID的池。关闭时未使用的任何保留标识都将被丢弃,并在启动时保留一个新的ID池。
如果您确实需要顺序标识,则可以创建一个标识表来控制生成的ID。它不是最漂亮或最好的方式,但可以让你更好地控制身份。一个好处是它为您提供了一些有趣的身份生成功能。例如,考虑您需要为每个客户生成一个增量编号,从每年1开始,然后使用标识表。
PS:标识表是一个简单的表,每个id有一行和一列。
对于Customer
表,有一个CustomerIdentity
表,用于存储最新的id。 id生成是使用update语句手动完成的。