create table TaUsers(id int identity(1,1),name varchar(20),age varchar(3),sex char(1)) 
go
insert into TaUsers 
select '张三','20','0' 
union all select '李四','23','1' 
union all select '王二','25','1' 
union all select '麻子','25','0' 
union all select '李四','23','1' 
go
select * from tausers;
go
insert into TaUsers values('李四','23','1'); 
select @@identity
select * from tausers;
go
go
drop table tausers;
go
--比如: insert into TaUsers values('李四','23','1'); 
--我要怎么样才能检索出这条刚插入数据的id呢?麻烦大虾帮个忙,先谢了. select id from TaUsers where name='李四' and age='23' and sex='1' 
--这样做怎么行呢?支个招...
/*结果
(5 行受影响)
id          name                 age  sex
----------- -------------------- ---- ----
1           张三                   20   0
2           李四                   23   1
3           王二                   25   1
4           麻子                   25   0
5           李四                   23   1(5 行受影响)
(1 行受影响)---------------------------------------
6(1 行受影响)id          name                 age  sex
----------- -------------------- ---- ----
1           张三                   20   0
2           李四                   23   1
3           王二                   25   1
4           麻子                   25   0
5           李四                   23   1
6           李四                   23   1(6 行受影响)*/

解决方案 »

  1.   

    create table TaUsers(id int identity(1,1),name varchar(20),age varchar(3),sex char(1))
    insert into TaUsers
    select '张三','20','0' union all
    select '李四','23','1' union all
    select '王二','25','1' union all
    select '麻子','25','0' union all
    select '李四','23','1' --比如:
    insert into TaUsers values('李四','23','1');
    SELECT   SCOPE_IDENTITY()drop table TaUsers
    /*
    ---------------------------------------- 
    6(1 row(s) affected)
    */
      

  2.   

    http://topic.csdn.net/u/20070605/09/55b581a0-c8a8-47b2-b5fe-264c0faa759a.html
      

  3.   

    注意SCOPE_IDENTITY, IDENT_CURRENT, and @@IDENTITY的区别
      

  4.   

    IDENT_CURRENT   返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT   不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT   返回为任何会话和作用域中的特定表所生成的值。 
    @@IDENTITY   返回为当前会话的所有作用域中的任何表最后生成的标识值。 
    SCOPE_IDENTITY   返回为当前会话和当前作用域中的任何表最后生成的标识值 SCOPE_IDENTITY   和   @@IDENTITY   返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY   只返回插入到当前作用域中的值;@@IDENTITY   不受限于特定的作用域。 例如,有两个表   T1   和   T2,在   T1   上定义了一个   INSERT   触发器。当将某行插入   T1   时,触发器被激发,并在   T2   中插入一行。此例说明了两个作用域:一个是在   T1   上的插入,另一个是作为触发器的结果在   T2   上的插入。 假设   T1   和   T2   都有   IDENTITY   列,@@IDENTITY   和   SCOPE_IDENTITY   将在   T1   上的   INSERT   语句的最后返回不同的值。 @@IDENTITY   返回插入到当前会话中任何作用域内的最后一个   IDENTITY   列值,该值是插入   T2   中的值。 SCOPE_IDENTITY()   返回插入   T1   中的   IDENTITY   值,该值是发生在相同作用域中的最后一个   INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用   SCOPE_IDENTITY()   函数,则该函数将返回   NULL   值。 而IDENT_CURRENT( 'T1 ')   和   IDENT_CURRENT( 'T2 ')   返回的值分别是这两个表最后自增的值。如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因   IGNORE_DUP_KEY   冲突而导致   INSERT   语句失败,表的当前标识值仍然会增加。