如何在一个存储过程中获取用inser插入的纪录

weekhb 2005-10-03 05:36:23
我有一个表 t (id为自动加1的序号)
id a
1 test
2 test2
我用 insert into t (a) values (test3)
我如何取这条纪录的id值
...全文
115 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
moodboy1982 2005-10-07
关注一下。
回复
iwl 2005-10-07
MorningTea(一勺抹茶) 正解
回复
wushimiang12 2005-10-04
學習中
回复
wushimiang12 2005-10-04
MorningTea(一勺抹茶) ( )
樓上大哥正解
回复
MorningTea 2005-10-03
为了避免@@IDENTITY的并发问题,在一般的批处理或存储过程中,最常用也比较保险的还是SCOPE_IDENTITY函数,尤其在处理流程中涉及触发器的情形。
回复
MorningTea 2005-10-03
就是要获得最后的identity值:

SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。

例如:select ident_current('表名') as '当前标识值'

@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。

例如:select @@identity

SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
例如:select SCOPE_IDENTITY()


举例:
create table #test(sn int identity(1,1),des varchar(10))
insert into #test select '10'
create table #testA(sn int identity(2,1),des varchar(10))
insert into #testA select '10'
-- (des)
select * from #test
select @@identity as '@@identity'
select ident_current('#test') as 'ident_current'
select SCOPE_IDENTITY() as 'SCOPE_IDENTITY'

/*
(1 row(s) affected)


(1 row(s) affected)

sn des
----------- ----------
1 10

(1 row(s) affected)

@@identity
----------------------------------------
2

(1 row(s) affected)

ident_current
----------------------------------------
1

(1 row(s) affected)

SCOPE_IDENTITY
----------------------------------------
2

(1 row(s) affected)

*/


回复
$扫地僧$ 2005-10-03
CREATE PROCEDURE Temp_T(@Temp2 as int OUTPUT)
as
insert into t (a) values ('test3')
SELECT @Temp2=@@IDENTITY



DECLARE @Temp as int
exec Temp_T @Temp OUTPUT
print @Temp
回复
weekhb 2005-10-03
假如id 字段為Identity的話
隻需要這樣 print @@indentity

是int类型,
--------------------------------------------
select id from tablename where a='test3'

问题时a=test3的可能会很多,id才是不重复的,a里面会有重复
回复
lxzm1001 2005-10-03
select id from tablename where a='test3'
回复
talantlee 2005-10-03
假如不是的話,那它為null
回复
talantlee 2005-10-03
假如id 字段為Identity的話
隻需要這樣 print @@indentity
回复
相关推荐
发帖
应用实例
创建于2007-09-28

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2005-10-03 05:36
社区公告
暂无公告