社区
MS-SQL Server
帖子详情
sql server 2008 insert 失败但是identity项已递增
lin11211408
2015-04-15 10:06:24
sql server 2008 有一个表主键id设置为 identity(1,1) ,在 insert 时看不到记录但是 id 项已递增。
求解。
...全文
346
10
打赏
收藏
sql server 2008 insert 失败但是identity项已递增
sql server 2008 有一个表主键id设置为 identity(1,1) ,在 insert 时看不到记录但是 id 项已递增。 求解。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
还在加载中灬
2015-04-15
打赏
举报
回复
你们应该有记录失败日志吧 还有另外一种可能,就是没有INSERT失败,而是因事务失败,合法的回滚了数据,
Tiger_Zhao
2015-04-15
打赏
举报
回复
很正常啊,就是应该这样的。
你可以想象这样的场景:
1)会话A插入、事务尚未递交,分配1
2)会话B插入、事务尚未递交,分配2(不能也分配1,否则就重复了)
3)会话C插入、事务递交,分配3(不能也分配1或2,否则就重复了)
4)会话A事务回滚
5)会话B事务回滚
很明显只要有插入,id必须递增,否则就会重复。
那么去掉步骤2~4,只留下会话A,是先递增了id再回滚了插入的,就是你的场景。
lin11211408
2015-04-15
打赏
举报
回复
引用 1 楼 ky_min 的回复:
identity列,不管插入失败还是成功,都会一直自增 因此,你INSERT后看不到记录,很明显是失败了
有没有办法看到失败的原因?这个项目已经上线好几年了昨天第一次出现这个问题
还在加载中灬
2015-04-15
打赏
举报
回复
identity列,不管插入失败还是成功,都会一直自增 因此,你INSERT后看不到记录,很明显是失败了
Tiger_Zhao
2015-04-15
打赏
举报
回复
#8 的例子也举得很好。
先准备好插入的数据(分配了id),再进行数据校验,不成功也会消耗掉一个id。
卖水果的net
版主
2015-04-15
打赏
举报
回复
如业务不太繁忙的话,开一下 sql profiler ,监控一段时间,直到发现了这个情况,再把语句都找出来,看看哪个执行失败了,就知道程序哪里有问题了。
shinger126
2015-04-15
打赏
举报
回复
这个是很容易测试出来的 create table #test (id int identity(1,1),name varchar(3)) insert into #test (name) select '1' insert into #test (name) select 'asssdfasdfaggg' insert into #test (name) select '3' select * from #test 可以看到错误提示,在第二句insert会发生字符串截断错误,导致插入失败,再插入一条就会发现标识值是已经增加了的
SQL77
2015-04-15
打赏
举报
回复
如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。 联机帮助原话
SQL77
2015-04-15
打赏
举报
回复
如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。 联机帮助原话
LongRui888
2015-04-15
打赏
举报
回复
这个日志里肯定是没有的,除非你的程序中有这种机制,就是 再事务失败的时候,记录相应的报错信息和相应的语句,否则肯定是很难监控到这种报错的信息的
SQL
Server
之 SET
IDENTITY
_
INSERT
SQL
Server
之 SET
IDENTITY
_
INSERT
SET
IDENTITY
_
INSERT
想要将值插入到自动编号(或者说是标识列,
IDENTITY
)中去,需要设定 SET
IDENTITY
_
INSERT
sql
server
自动增长字段设置方法.rar
从网上搜集的
sql
server
自动增长字段设置方法
SQL
SERVER
触发器插入数据
CREATE TRIGGER TT ON TSYS_BAMKZ FOR
INSERT
AS
INSERT
TSYS_MKZ SELECT B.MKZM,A.yhz,B.PARENT FROM (SELECT DISTINCT yhz FROM TSYS_MKZ) A,
INSERT
ED B
SQL
Server
笔试A卷
一套
SQL
Server
查询笔试试卷,已经排好版
My
sql
和
SQL
server
区别.pdf
My
sql
和
SQL
server
区别.pdf
MS-SQL Server
34,837
社区成员
254,634
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章