Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 标识列中存在缺口-巨大-MS SQL Server 2008 R2标准64位SP3_Sql Server_Sql Server 2008_Tsql_Sql Server 2008 R2 - Fatal编程技术网

Sql server 标识列中存在缺口-巨大-MS SQL Server 2008 R2标准64位SP3

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 因为这不是正常加载,而是大规模

此问题与MS SQL 2008 Server标准R2 SP3中的奇怪行为有关

我读过很多关于SQLServer中标识增量的问题以及它们之间奇怪的差距。但基本上人们说这与交易或重启有关。 在我的例子中,我们使用的是MS SQL Server 2008 R2标准64位SP3的命名实例,其差距非常巨大。 应用程序在表中插入了130000条记录,并发生算术溢出标识转换为int错误。 我们截断表,并批量插入70000条记录。在批量插入标识列期间,最大值大于9 000 000

因为这不是正常加载,而是大规模插入-在该操作期间没有回滚、重新启动或任何其他问题

所以差距不是1000,而是千分之十

由于我不控制应用程序代码,这是从其他公司购买的商业软件,我很简单,作为此类数据库的管理员,我能做些什么?我必须每6个月截断一次表吗?实时ID列中的监视器

差距不是1000,而是千分之十。
有没有学生遇到过类似的问题

对不起,这本身不是一个解决方案,但您可以从下面的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,这将更改间隙,但它可以在很长一段时间内防止溢出