首页 新闻 会员 周边 捐助

我遇到数据库问题了

0
悬赏园豆:20 [已关闭问题]

           我的数据库中设了字段:num  int  identity(1,1) not null

          插入数据后num自动增加, 但是在删除数据的时候num被一起删除了,

我要找出num中那些被删除了, 然后再再原处补进数据;

举个例子:

 

比如说我开始删除的是第五条数据,那么我在插入数据的时候一定要到num=5,但是num=5这条数据时全部删除的,(另外数据表的条数比较庞大), 谁能帮我看看,非常感谢!

问题补充: 可能我的问题还没有说的够清楚: 是这样的, 由于中间删除的条数很多,所以必须要自己能够找到插入数据的地方,然后把数据插入。
小老鼠的博客的主页 小老鼠的博客 | 初学一级 | 园豆:25
提问于:2010-03-17 16:45
< >
分享
其他回答(2)
0
SET IDENTITY_INSERT [数据库名.[架构名].]表名 ON

--插入数据

SET IDENTITY_INSERT [数据库名.[架构名].]表名 OFF

 

 

SET IDENTITY_INSERT [数据库名.[架构名].]表名 ON
--插入数据
SET IDENTITY_INSERT [数据库名.[架构名].]表名 OFF

SET IDENTITY_INSERT [数据库名.[架构名].]表名 ON|OFF
表示设置允许将显式值插入表的标识列中,设置后你就可以手动Insert或者Update表中主键的值了

齐.net | 园豆:1421 (小虾三级) | 2010-03-17 16:55
0

如果你使用数据库自带的identity做为主键(如你的num),就无法保证主键的连续性,如num=5的记录被删除,那么num就会为1 2 3 4 6 7……,这中情况无法避免。

如果想避免,就自己写程序生成主键,比如,在一个表中记录删除了哪些num的值,下次插入的时候先用这个表中的值作为主键,如果表中没有数据,就找出最大的num值,在此基础上+1作为主键的值。

但这样做有必要吗?不仅效率低下,而且没有任何意义啊。主键就是主键,不应该在你的数据表里有任何业务上的意义,因此不连续是无所谓的。如果你的num字段不是主键,那你设置成identity就有问题了。

麒麟.NET | 园豆:3614 (老鸟四级) | 2010-03-17 16:58
0

 设一个flagdeleted字段不就行了,删除了,flagdeleted=1,想改过来flagdeleted=0,不就行了,原来的num不受影响的

ForFreeDom | 园豆:589 (小虾三级) | 2010-03-18 10:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册