Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
MS SQL标识列在标识列上计数不正确_Sql_Sql Server_Coldfusion - Fatal编程技术网

MS SQL标识列在标识列上计数不正确

MS SQL标识列在标识列上计数不正确,sql,sql-server,coldfusion,Sql,Sql Server,Coldfusion,我正在使用MS SQL Server。有人能告诉我,为什么我的数据库中的身份栏在自动递增1的情况下,数字却急剧增加?首先,我一直在逐行输入数据。最终,在100个条目之后,它会将它们放置在不整齐的位置,在31个条目之后放置101个条目。现在,它突然从290年跳到了1400年,那时它应该还处于正常状态。。。。管理工具仍然显示了正确的条目数量,但它只是没有意义,这是如何计数一。有人能给我解释一下吗 插入dbo.Users(员工号、用户名、用户名、密码、姓氏、职位、电子邮件、电话分机、分行、部门、状

我正在使用MS SQL Server。有人能告诉我,为什么我的数据库中的身份栏在自动递增1的情况下,数字却急剧增加?首先,我一直在逐行输入数据。最终,在100个条目之后,它会将它们放置在不整齐的位置,在31个条目之后放置101个条目。现在,它突然从290年跳到了1400年,那时它应该还处于正常状态。。。。管理工具仍然显示了正确的条目数量,但它只是没有意义,这是如何计数一。有人能给我解释一下吗


插入dbo.Users(员工号、用户名、用户名、密码、姓氏、职位、电子邮件、电话分机、分行、部门、状态、图片、管理员)
价值(
, 
, 
, 
, 
, 
, 
, 
, 
,  
, 
,  
, 
)
self.location=“../login.cfm”;
警报(“非图像文件”);
self.location=“../register.cfm”;

保证数字是单调递增的,但不是相邻的。这是一些相关的文件

通常,标识列也被约束为唯一键或主键。但是,如果没有这些约束,它们甚至不能保证是唯一的

它们确实在增加。奇怪的行为是为了效率,特别是在并行系统中

如果需要,在查询时很容易获得无间隙的连续值:

select row_number() over (order by id) as sequential_with_no_gaps

因为这就是标识值的定义方式。它们保证是单调递增的,但不是没有间隙的。它们最终会填补这些数字吗?还是会永远被忽略?抱歉看起来很可笑,就像我选择增加1时跳过的意义是什么…我也觉得有点奇怪,但不知道为什么它很重要。通常情况下,您并不依赖于id是连续的,只需要它们是唯一的。如果需要插入新记录的id,请使用cfquery的result属性。它返回一个包含生成的id的结构。请参阅
result.generatedKey
result.identityCol
…在数据库故障或服务器重新启动期间,某些指定的值可能会丢失。这可能导致插入时标识值出现间隙。呵呵。我认为这些漏洞可能是由于删除或在上插入标识造成的。每天学点新东西……多读一点,听起来也像是?@Leigh。我相信这个问题在2008年就存在了。在任何情况下,规则都很简单:将
identity
列定义为
unique
。那么,不要期望它们是无间隙的。它们将形成一个单调序列。如果您真的想要无间隙,请使用序列,但这会带来额外的开销,特别是在高容量事务环境中。是的,我使用标识值的方式不会导致连续值成为问题,但如果经常发生,则对于整数列而言,在pop处使用1000 id似乎会损失很多。。。从现在开始,在选择id数据类型时,我肯定会考虑一些事情。@Leigh。如果你在网上搜索,你会找到解释。我认为这与在大型插入期间在并行环境中保留值有关。这是有充分理由的。
select row_number() over (order by id) as sequential_with_no_gaps