当前位置:asp编程网>技术教程>Database教程>  正文

sql server2005数字型字段转自动增量字段的方法

2010-10-14 08:03:58   来源:www.aspbc.com    作者:wangsdong   浏览量:1986   收藏

功能:sql server数字型字段转自动增量字段的方法
作者:wangsdong
来自:www.aspbc.com
原创文章,转载请保留此信息,欢迎转载。

数据库设计的时候要特别小心,不合理的数据库设计带来的麻烦太大了,我终于体会到了。
最近网站上客户发布产品老是遇到问题,经检查,找出原因:本应该一个自动增量字段,被设计成数字型的字段了,并且还是主键(不允许重复字段)。每次客户添加产品时,先要计算出最大的ProductID,然后+1,为下一条

记录做准备。以前网站流量小的时候,没有多大影响。现在在线人数很多,同时发布产品的人可能有几个。问题来了:如果有三个人同时点击发布产品,第一个人产生了一个ProductID,第二个人也产生了一个ProductID,第

三个人也产生了一个ProductID,并且三个是一样的。写入到数据库中时,第一个可以成功,其他两个失败。因为是主键,不允许重复的原因。

找了好久才找到解决办法:(将原来的数字型字段转为自动增量字段)
假设:
表Product中有三个字段Productid(数字型字段),sname,age
里面记录

insert into Product(Productid,sname,age) values(3,'张三',20)   
insert into Product(Productid,sname,age) values(5,'李四',21)   
insert into Product(Productid,sname,age) values(6,'王五',22)   
insert into Product(Productid,sname,age) values(8,'陈六',23)  
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)


解决办法:
我先建一个表Product2,里面的字段和Product一样,但Productid是自动增量字段
表Product2中有三个字段Productid(自动增量字段),sname,age

然后使用以下语句

set identity_insert Product on  
insert Product2(Productid,sname,age) select Productid,sname,age from Product   
set identity_insert Product off  
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)

这样就将Product中的所有数据导入到Product2中了
由于使用了set identity_insert Product on这个,使的Productid不变。
然后删除掉Product表(为了安全起见,改名就可以了),再将Product2表名改成Product这样就行了。
最后再去程序中将原来计算ProductId值的地方给删除就行了。
彻底解决了这个问题。



关于我们-广告合作-联系我们-积分规则-网站地图

Copyright(C)2013-2017版权所属asp编程网