问个关于标识列的问题,再问!!!!!!

koushui241 2006-06-19 11:38:42
比如我的sql server2000里的某个表里有个自动编号的列,我把它设置为标识列,当我删除某行后,这行的编号就没有了(删除第3行后数据库会出现1,2,4,5,....的现象)如何才能在删除记录后,数据库中的记录仍然按1,2,3,4,5,.....的形式自动排列呢???

补充一下,我可以在标识字段的公式里实现这个功能吗?如果能的话公式要怎么写呢??
望高手帮忙一下!!!!!!!!!!!!!!
...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellowork 2006-06-21
  • 打赏
  • 举报
回复
SQLSERVER会向楼主的想法说NO。IDENTITY列不能使用公式。
不要刻意美化了,怎么美化都没有SQLSERVER内建的机制有效率,既然SQLSERVER没有内建这样的机制,还是放弃努力吧,不要拿效率和性能开玩笑了。
如果楼主的IDENTITY列赋予了特殊含义的话,还是选择一个INT列吧。IDENTITY列通常用于UNIQUE约束,也有用于主键的,仅此而已,所以美化根本没有意义。
LouisXIV 2006-06-19
  • 打赏
  • 举报
回复
连号只是为了美观的话,大可不必做这样的事情-_-;
jwt1982 2006-06-19
  • 打赏
  • 举报
回复
如此控制,性能上会很差

比方说,你有10W条记录,当你删除第一条时,想想会发生什么事情?

同时更新10W条记录?

如果此时并发删除3条记录,连续更新三次10W条记录?等记录数多了,晕倒。
fcuandy 2006-06-19
  • 打赏
  • 举报
回复
自己算ID吧
ISNULL(MAX(ID),0)+1
  • 打赏
  • 举报
回复
使用自增做主键时,当删除行时,自增编号编程不连续的,是因为在SQL中将此记录进行了逻辑删除,并非物理删除,你的想法最好可以自定义一个列,自己通过写程序来控制自增。
LouisXIV 2006-06-19
  • 打赏
  • 举报
回复
没有

取出后再写回清空过的原表

很多人为什么都要做这样的无用功,断号又不影响操作,美化可以用前台来处理,何必呢^^;
gohst001 2006-06-19
  • 打赏
  • 举报
回复
标示列做不到的,一般来说都是设置为int列,然后插入的时候id=max(id)+1

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧