怎样调用存储过程让一个字段自增

时间:2022-04-20 14:00:13
创建一个表的时候,存在字段id,若不将它设为标识和自增,怎样在程序中调用存储过程实现?  谢谢回答!

7 个解决方案

#2


use Tempdb
go
create table T(ID int primary key,Name sysname)
go
create procedure P1(@Name sysname)
as
declare @ID int
select @ID=isnull(max(ID)+1,1) from T
insert T values(@ID,@Name)
go
exec P1 @Name='a'
exec P1 @Name='b'
go
select * from T
/*
ID Name
1 a
2 b
*/

#3


1.单笔新增的话,还好处理,同时新增多笔,就比较麻烦
2.多个同时新增,也比较麻烦

#4



select identity(int,1,1) as id2,* into tb2 from tb1

drop table tb1  ---删除旧表
exec sp_rename 'tb2','tb1'  ---修改旧表的名称为新表
alter table tb1 drop column id  ---删除就得标志列

exec sp_rename 'tb2.id2','id','column'----将新的标志列的名称修改成id


要知道怎么做,只要开启profile,再在企业管理器里面更改一下,就能跟踪到语句了

#5


select @@indentity

#6


如果业务规则要求id字段必须是连续的流水或者满足别的什么混蛋的逻辑,可以在存储过程搞
否则的话还是identity列比较方便啊...

#7



--表中最大的id+1
select max(id)+1 from tb

#1


#2


use Tempdb
go
create table T(ID int primary key,Name sysname)
go
create procedure P1(@Name sysname)
as
declare @ID int
select @ID=isnull(max(ID)+1,1) from T
insert T values(@ID,@Name)
go
exec P1 @Name='a'
exec P1 @Name='b'
go
select * from T
/*
ID Name
1 a
2 b
*/

#3


1.单笔新增的话,还好处理,同时新增多笔,就比较麻烦
2.多个同时新增,也比较麻烦

#4



select identity(int,1,1) as id2,* into tb2 from tb1

drop table tb1  ---删除旧表
exec sp_rename 'tb2','tb1'  ---修改旧表的名称为新表
alter table tb1 drop column id  ---删除就得标志列

exec sp_rename 'tb2.id2','id','column'----将新的标志列的名称修改成id


要知道怎么做,只要开启profile,再在企业管理器里面更改一下,就能跟踪到语句了

#5


select @@indentity

#6


如果业务规则要求id字段必须是连续的流水或者满足别的什么混蛋的逻辑,可以在存储过程搞
否则的话还是identity列比较方便啊...

#7



--表中最大的id+1
select max(id)+1 from tb