SQL server 2008例如:
表T
T
-----
id(自增长,从1到N)
name
当insert一条数据之后,怎么能获取到生成的id值。最后有C#的代码。谢谢大家!

解决方案 »

  1.   

    当运行完插入语句后,执行select   @@identity就可得到自动生成的id如果是sql server 最好用select SCOPE_IDENTITY() as id
    因为@@identity全局的同类还有IDENT_CURRENT(‘table’)IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
    @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
    SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
      

  2.   

    你再查一遍啊。 max 取最大值
      

  3.   

    insert成功之后,查询select max(id) from tableName 
      

  4.   

    如果用output类型返回的话
    先声明@p_out output 
    再set @p_out = @@identity
      

  5.   

    select @@identity
     这个
      

  6.   

    SCOPE_IDENTITY返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。IDENT_CURRENT返回为任何会话和任何作用域中的指定表最后生成的标识值。这个函数需要一个以表名为值的变量,也就是说虽然不受会话和作用域的限制,却会受到表的限制。@@IDENTITY返回最后插入的标识值。体会:加上事务处理,两个函数一个变量没有本质区别。不加事务处理两个函数一个变量受到其他会话、作用域的影响不一样。一直以来都是使用@@identity来获得最后一个插入到表的记录的identity值,最近发现这种方法在某种情况是不可靠的,先来看看两个概念
    作用域:在SQL SERVER作用域就是一个模块-存储过程,触发器,函数或批处理
    会话: 一个用户连接产生的所有上下文信息相同点:都是返回最后插入的标识值
    不同点:
    @@identity:返回当前会话最后一个标识值,不限于特定的作用域;
    ident_current('tablename'):返回任何会话,任何作用域中的指定表中生成的最后一个标识值;
    scope_identity:返回当前会话当前作用域任何表生成的最后一个标识值 。
      

  7.   


    select @@identity from TT
      

  8.   

    insert into table values();select @@identity