首页 新闻 赞助 找找看

主键不是“自增长”如果何添加记录?

0
[已解决问题] 解决于 2012-03-07 09:33

有多个表,所有的数据都来自另一个数据库,为了和目标数据库里的数据一致,所有的表的主键不是“自增长类型”。

现在我要问。

同样的表结构要用于其它的项目上,表的主键就应该是“自增长”的。

有没有一种办法,让主键 不为 “自增长”,当插入的时候不指定ID时则取最大主键值+1,如果插入数据里已指定主键ID值时,则直接写入表中

 

wunaigong的主页 wunaigong | 初学一级 | 园豆:4
提问于:2010-12-03 14:07
< >
分享
最佳答案
1

这个很简单吧,一个分支判断,当未指定主键时你可以先获得最大的,然后加1。语句上面的朋友已经给出了,然后执行插入。至于给定的,那么就直接插入了。

至于事务,如果只是插入一条语句的话,没必要,除非你插入的是一个语句组合。事务这东西毕竟多开销性能。能不用尽量不要用。存储过程倒是随便。如果你考虑多数据库兼容,别用存储过程,用语句。如果你考虑语句处理方式经常改变,那么就用存储过程。如果是大数据量,你考虑性能,那么用存储过程。不过现在ADO.net的性能很好了,不是太需要。

BLoodMaster | 初学一级 |园豆:135 | 2010-12-03 14:29
其他回答(6)
0

开排他事务

select max(id) from table_name

然后insert

提交事务

Gray Zhang | 园豆:17610 (专家六级) | 2010-12-03 14:12
0

这个可以的,写个存储过程就行

artwl | 园豆:16736 (专家六级) | 2010-12-03 14:12
0

先取最大的,在加1插进去不久行了

清风子 | 园豆:200 (初学一级) | 2010-12-03 14:17
0

有自增长为什么一定要自己写呢?

顾晓北 | 园豆:10844 (专家六级) | 2010-12-03 14:49
0

把字段设置为自增吧,自增字段也是可写的,如果写入已有的标识时把数据库的"开启标识写入"开起来就可以了,代码:

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
I,Robot | 园豆:9783 (大侠五级) | 2010-12-03 22:15
0

每种数据库的自增策略都不一样,参考:http://www.cnblogs.com/xlovey/archive/2010/11/30/1891656.html

Astar | 园豆:40805 (高人七级) | 2010-12-06 13:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册