sql server 2005 :我在employee表中有一个列empid,标识为on.if在向表中插入数据时出现错误.identity is incremented .i希望标识仅在插入记录时才增加如果我已经生成了从1到5的emp id,然后在第6个记录插入错误时ocurrs.and下一条记录插入时identity值将是7 .i希望它是6。
发布于 2009-05-05 10:21:38
你为什么要这么做?
identity列应该只用作数据库的“内部管理价值”,并且它不应该具有“业务价值”,那么为什么序列中存在间隙又有什么关系呢?
如果identity被正确使用,那么您的软件用户将永远不会遇到具有identity值的列;您只需使用它来唯一地标识一条记录。
发布于 2009-05-05 10:08:50
我不认为这是可以做到的。如果您希望您的标识号是完全连续的,那么您可能需要自己生成它们,而不是使用SQL标识功能。
编辑:即使回滚失败的事务也不会使身份计数下降,这是设计的,请参阅this other question。
发布于 2009-05-05 16:58:21
如果存在差距,您有什么有效的业务原因需要关心?数据库没有理由关心,也完全有理由希望确保身份值永远不会重复用于其他用途,因为它们可能会在根据旧报告查找信息等方面导致严重的数据完整性问题。假设您有一份报告,显示了上个月的订单,然后您删除了其中一条记录,因为客户被复制并因此进行了重复数据删除。然后,对已删除的被复制的客户重用身份字段。NOw有人查看了上个月的报告,去查找客户12345,发现与该客户相关联的数据属于约翰·史密斯,而不是萨利·琼斯。BUt这个人不知道这一点,因为她正在使用aggreagate,所以现在她有了完全可以避免的错误信息。如果她正在查找被删除的客户,则该过程可能会将她重定向到重复数据删除后留下的正确客户。
https://stackoverflow.com/questions/824190
复制相似问题