Sql server 标识列中存在缺口-巨大-MS SQL Server 2008 R2标准64位SP3
此问题与MS SQL 2008 Server标准R2 SP3中的奇怪行为有关 我读过很多关于SQLServer中标识增量的问题以及它们之间奇怪的差距。但基本上人们说这与交易或重启有关。 在我的例子中,我们使用的是MS SQL Server 2008 R2标准64位SP3的命名实例,其差距非常巨大。 应用程序在表中插入了130000条记录,并发生算术溢出标识转换为int错误。 我们截断表,并批量插入70000条记录。在批量插入标识列期间,最大值大于9 000 000 因为这不是正常加载,而是大规模插入-在该操作期间没有回滚、重新启动或任何其他问题 所以差距不是1000,而是千分之十 由于我不控制应用程序代码,这是从其他公司购买的商业软件,我很简单,作为此类数据库的管理员,我能做些什么?我必须每6个月截断一次表吗?实时ID列中的监视器 差距不是1000,而是千分之十。Sql server 标识列中存在缺口-巨大-MS SQL Server 2008 R2标准64位SP3,sql-server,sql-server-2008,tsql,sql-server-2008-r2,Sql Server,Sql Server 2008,Tsql,Sql Server 2008 R2,此问题与MS SQL 2008 Server标准R2 SP3中的奇怪行为有关 我读过很多关于SQLServer中标识增量的问题以及它们之间奇怪的差距。但基本上人们说这与交易或重启有关。 在我的例子中,我们使用的是MS SQL Server 2008 R2标准64位SP3的命名实例,其差距非常巨大。 应用程序在表中插入了130000条记录,并发生算术溢出标识转换为int错误。 我们截断表,并批量插入70000条记录。在批量插入标识列期间,最大值大于9 000 000 因为这不是正常加载,而是大规模
有没有学生遇到过类似的问题 对不起,这本身不是一个解决方案,但您可以从下面的sys表中确认种子值和增量值
select
object_name([object_id]) as [objectname]
, [name]
, [seed_value]
, [increment_value]
, *
from sys.identity_columns
增量值通常为1,但如果它是100(例如),则在插入10个新行后,标识值将提升1000。标识中存在差异的可能原因是当insert语句回滚时。您正在使用第三方应用程序,这可能是这方面的一个罪魁祸首。因此,我建议您创建一个虚拟表来测试您的断言,如下所示,查看sql server是否会导致漏洞:
create table TestGaps
(
id int identity(1,1)
,someValue char(5)
)
go
with cte as
(
select 1 as rn,'ABCDE' as val
union all
select (rn + 1), val from cte where rn<32767
)
insert into TestGaps(someValue)
select val from cte option(maxrecursion 32767)
可能重复:您是如何创建标识列的。可以定义间隙的大小为什么不能在将数据插入表之前使用DBCC命令间隙将不会增加可能的重复值您可以将列类型更改为big int,这将更改间隙,但它可以在很长一段时间内防止溢出