在使用sqlserver2005时,定义了一个identity标识的字段,每次插入1条语句时,如果错误,这个有identity标识的字段值会向上跳1个。可实际上我并没有插入成功。因此也不想这个表的的identity字段跳到下一个。请问有什么方法解决吗。

解决方案 »

  1.   

    晕,这好象不是aspnet2.0的问题哦
      

  2.   

    跳1个也没什么关系嘛,一般来说我们不应该使用具有实际意义的字段来做identity,而且这个字段一般不会让用户看见~
      

  3.   

    虽然用户不会看到,但总感觉不太好。
    create table TProduct(ProductID int identity(1,1),ProductName varchar(6));
    create unqiue index IX_TProduct_ProductName ON TProduct(ProductName);
    一、第1次插入
    insert into ('AA');  ProductID =1 
    二、第2次插入
    insert into ('AA');  由于有唯一索引,系统报错,说不让插入。三、第3次插入
    insert into ('B');  ProductID =3正常来说,插入都没有成功,为什么这个表的identity还会跳。可以设置只能正确插入才跳号呀。 
      

  4.   

    不是Asp.net 2.0的问题, 也不是Sql server的问题. 是这样规定的, 种子值是自增的, 
    程序员能够控制的是种子的: 每次增量值(默认为1)
      

  5.   

    同意Eddie005(♂) №.零零伍 (♂) 
    这个字段完全不用管
      

  6.   

    以前我做一个在线考试系统,使用了oracle 817,用了sequence,出现过类似情况,插入失败,但是sequence还是增加了。
    不过这对系统没有什么影响,因为用户不关心这个。
      

  7.   

    有办法!就是设置成int类型的,然后自己编写程序去写流水号。不要误会identity类型,它并不是流水号,SQL Server从未说它是顺序流水号,只是说会递增而已。
      

  8.   

    正常来说,插入都没有成功,为什么这个表的identity还会跳。可以设置只能正确插入才跳号呀
    ————————————————————————————————————————————
    其实你这个要求仅仅是个人的一面之辞。SQL Server是面向企业管理、要并发处理效率的,所以不会对全局的资料随便上锁(这会让系统慢上十倍还不止)。这是很“现实”的技术问题,不是一厢情愿按照个人单机小软件的要求去实现的。因此,你完全可以去自己写这个流水号而不用identity,或者等着SQL Server将来专为此类用户做一个新的操作类型。