日期:2014-05-18  浏览次数:20463 次

插入最大id的累加
要是一个数据表,它的主键id没有设置IDENTITY,在不再修改设置的IDENTITY的情况下,
我就用max来获取最大id,但我写的这条sql,只能获取一次最大的id

SQL code

insert into tb_Card(CardID, UserID,ModuleID,CardName,CardContent,CardIsPride,CardDate) 
select (select MAX(CardID) from tb_Card) as CardID, UserID,ModuleID,CardName,CardContent,CardIsPride,CardDate 
from tb_Card where CardID in(5,6,7)


在不改变这条sql结构的情况下,能实现CardID最大值的累加吗??
谢谢

------解决方案--------------------
05么

试试

select (select MAX(CardID) from tb_Card)+row_number() over (order by getdate()) as CardID
------解决方案--------------------
你的语句有问题,
select (select MAX(CardID) from tb_Card) as CardID, UserID,ModuleID,CardName,CardContent,CardIsPride,CardDate 
from tb_Card where CardID in(5,6,7)


那你取到的三条记录的 cardid都是相同的,如果cardid是主键,会报错的。
你没有验证你的语句到底对不对么?
后面跟贴的也没看出来么?

你可以做一个最大号表,然后从最大号表里要最大值,

------解决方案--------------------
1楼的方法应该可行
------解决方案--------------------
insert into tb_Card(CardID, UserID,ModuleID,CardName,CardContent,CardIsPride,CardDate) 
select (select MAX(CardID)+1 from tb_Card) as CardID, UserID,ModuleID,CardName,CardContent,CardIsPride,CardDate 
from tb_Card where CardID in(5,6,7)

------解决方案--------------------
1楼的思路是完全正确的
但是真的应用的话,不建议你这样做
应为有考虑多个用户同时实行这个SQL的问题
会造成别的用户数据插入失败,IDENTITY真的不想用的话
建议你做一个专门用来生成ID的模块,管理各种需要自动生成的
ID
------解决方案--------------------
探讨
insert into tb_Card(CardID, UserID,ModuleID,CardName,CardContent,CardIsPride,CardDate)
select (select MAX(CardID)+1 from tb_Card) as CardID, UserID,ModuleID,CardName,CardContent,CardIsPride,CardDate……