有多个表,所有的数据都来自另一个数据库,为了和目标数据库里的数据一致,所有的表的主键不是“自增长类型”。
现在我要问。
同样的表结构要用于其它的项目上,表的主键就应该是“自增长”的。
有没有一种办法,让主键 不为 “自增长”,当插入的时候不指定ID时则取最大主键值+1,如果插入数据里已指定主键ID值时,则直接写入表中
这个很简单吧,一个分支判断,当未指定主键时你可以先获得最大的,然后加1。语句上面的朋友已经给出了,然后执行插入。至于给定的,那么就直接插入了。
至于事务,如果只是插入一条语句的话,没必要,除非你插入的是一个语句组合。事务这东西毕竟多开销性能。能不用尽量不要用。存储过程倒是随便。如果你考虑多数据库兼容,别用存储过程,用语句。如果你考虑语句处理方式经常改变,那么就用存储过程。如果是大数据量,你考虑性能,那么用存储过程。不过现在ADO.net的性能很好了,不是太需要。
开排他事务
select max(id) from table_name
然后insert
提交事务
这个可以的,写个存储过程就行
先取最大的,在加1插进去不久行了
有自增长为什么一定要自己写呢?
把字段设置为自增吧,自增字段也是可写的,如果写入已有的标识时把数据库的"开启标识写入"开起来就可以了,代码:
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF } |