在insert时获得插入的自增编号

w5263 2009-03-10 01:00:22
在insert时,能够获得要插入行的自增编号,就是在插入时就能获得自增编号。
现在我是用两条语句来实现的,先插入空行,在update行,用了一个过程。
现在希望能一条语句实现,盼望指教,谢谢。
...全文
413 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
tszsc 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Happy_Stone 的回复:]
SQL code--@@IDENTITY和SCOPE_IDENTITY和IDENT_CURRENT的区别
@@IDENTITY--是得到当前会话的所有范围的最后插入的IDENTITY值
SCOPE_IDENTITY--是得到当前会话的当前范围的最后插入的IDENTITY值
IDENT_CURRENT--是得到指定表的最后插入的IDENTITY值,与会话、范围无关。
[/Quote]
我也学习了。
Andy-W 2009-03-10
  • 打赏
  • 举报
回复
参考:
Use test
Go
If object_id('c_test') Is Not Null
Drop Proc c_test

If object_id('test') Is Not Null
Drop Table test
Go
Create Table test(id int Identity(1,1) Primary Key, x int)
Go
Create Proc c_test
(
@id int Output,
@x int
)
As
Insert Into Test (x) Values (@x)
Set @id=Scope_identity()
Go
Declare @newid int
Exec c_test @newid Output,525

Select @newid As [刚Insert的ID]

/*
刚Insert的ID
-----------
1
*/
Andy-W 2009-03-10
  • 打赏
  • 举报
回复
参考:
Use test
Go
If object_id('c_test') Is Not Null
Drop Proc c_test

If object_id('test') Is Not Null
Drop Table test
Go
Create Table test(id int Identity(1,1) Primary Key, x int)
Go
Create Proc c_test
(
@id int Output,
@x int
)
As
Insert Into Test (x) Values (@x)
Set @id=Scope_identity()
Go
Declare @newid int
Exec c_test @newid Output,525

Select @newid As [刚Insert的ID]

/*
刚Insert的ID
-----------
1
*/
hui_hui_2007 2009-03-10
  • 打赏
  • 举报
回复
create table # (autoid int identity(1,1),f2 varchar(20) )

insert into #
select 'aaaaaaa' union all
select 'bbbbbbbbbb' union all
select 'ccccc' union all
select 'dddddddd' union all
select 'eeeeeeeee' union all
select 'fffffffffff' union all
select 'ggggggggg' union all
select 'hhhhhhhhh' union all
select 'iiiiiiiii' union all
select 'jjjjjj' union all
select 'kkkkk' union all
select 'lllllll' union all
select 'mmmmmmmm' union all
select 'nnnnnnnn' union all
select 'oooooo' union all
select 'ppppp' union all
select 'qqqqqqq' union all
select 'rrrrrr'

--这一句可以显示
select @@identity
appleller 2009-03-10
  • 打赏
  • 举报
回复
好像是要实现自动填补断号的功能?

如果用MAX(ID) +1也不对,如果删除当中的一天记录就不管用了。

建议要写个整理断号的功能,顺序改变ID号码,不要设置成自增量了。
例:
1、2、3、4、5
删除3

1、2、4、5
删除3之后调用整理功能改为
1、2、3、4
然后添加时就用到5了。
hukuangloney 2009-03-10
  • 打赏
  • 举报
回复
我也认为是MAX(ID) +1 直接从表中取
等不到来世 2009-03-10
  • 打赏
  • 举报
回复
select ident_current('tb')+1
w5263 2009-03-10
  • 打赏
  • 举报
回复
max到时候是得到最大的数值,如果我插入到了第25行,我又删除了第25行,我再插入时我得到的自增编号是26,但max得到是25。
我是想在插入前得到自增编号,同时写入到插入的插入数据的某一列中。
conan304 2009-03-10
  • 打赏
  • 举报
回复
select max(id)+1
conan304 2009-03-10
  • 打赏
  • 举报
回复
select max(id)+1
noviceliu 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 w5263 的回复:]
我是不想要在插入之后获得自增编号,而是想在插入之前就能获得,在插入时我能够把这个自增编号写入到插入行中
[/Quote]你为什么要手动插入呢,你设为自增,让系统自动给你插入不好吗?你只需要插入其他的字段就可以了。
lanmengxjh 2009-03-10
  • 打赏
  • 举报
回复
select max(自增编号)+1 ...
[Quote=引用 10 楼 w5263 的回复:]
我是不想要在插入之后获得自增编号,而是想在插入之前就能获得,在插入时我能够把这个自增编号写入到插入行中
[/Quote]
nzperfect 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 w5263 的回复:]
我是不想要在插入之后获得自增编号,而是想在插入之前就能获得,在插入时我能够把这个自增编号写入到插入行中
[/Quote]

这个ms实现不了了
w5263 2009-03-10
  • 打赏
  • 举报
回复
我是不想要在插入之后获得自增编号,而是想在插入之前就能获得,在插入时我能够把这个自增编号写入到插入行中
you_tube 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 perfectaction 的回复:]

@@identity
贴出你写的来看看
[/Quote].
MOTA 2009-03-10
  • 打赏
  • 举报
回复
@@identity 正解
ks_reny 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sdhdy 的回复:]
SQL codeinsert tablename(col1,col2) select @@identity
[/Quote]
學習
sdhdy 2009-03-10
  • 打赏
  • 举报
回复
insert tablename(col1,col2) select @@identity 
jwdream2008 2009-03-10
  • 打赏
  • 举报
回复
写到一起如下格式:
Insert 语句; SELECT SCOPE_IDENTITY() 就可以了得到自增ID
快乐_石头 2009-03-10
  • 打赏
  • 举报
回复
--@@IDENTITY和SCOPE_IDENTITY和IDENT_CURRENT的区别
@@IDENTITY--是得到当前会话的所有范围的最后插入的IDENTITY值
SCOPE_IDENTITY--是得到当前会话的当前范围的最后插入的IDENTITY值
IDENT_CURRENT--是得到指定表的最后插入的IDENTITY值,与会话、范围无关。
加载更多回复(3)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧