现在有这样一张表有两个字段一个是ID,一个是NAME
ID是自增的
NAME是可重复的
先在要写一个存储过程插入一行数据,也就是插入一个NAME
然后获取它的ID
请问要用什么办法?
有没有什么临时表啊,全局变量之类是来存储这个自增ID的?

解决方案 »

  1.   

    --有关标识的几个函数区别,楼主可以参考一下这个:
    http://blog.csdn.net/sdhdy/archive/2009/04/26/4126265.aspx--@@IDENTITY和SCOPE_IDENTITY和IDENT_CURRENT的区别 
    @@IDENTITY--是得到当前会话的所有作用域的最后插入的IDENTITY值。 
    SCOPE_IDENTITY--是得到当前会话的当前作用域的最后插入的IDENTITY值。 
    IDENT_CURRENT--是得到指定表的最后插入的IDENTITY值,与会话、作用域无关。
    --一个会话,就是一个用户连接。
    --一个作用域就是一个模块——存储过程、触发器、函数或批处理。
    =========================================--和标识有关的几个函数。
    select ident_current('tablename')--标识当前值
    select ident_incr('tablename')--标识增量
    select ident_seed('tablename')--标识种子
      

  2.   

    create proc k 
    @n int 
    @name varchar(10)
    as
    insert tb
    values(@name)
    set @n=(select max(id) from tb )
    print rtrim(@N)exec k '小麦'
      

  3.   

    create proc k 
    @name varchar(10)
    as
    declare @n int
    insert tb
    values(@name)
    set @n=(select max(id) from tb )
    print rtrim(@N)exec k '小麦'
      

  4.   

    最好是用这个:
    select SCOPE_IDENTITY()
      

  5.   

    -- =========================================
    -- -----------t_mac 小编-------------------
       --------------------希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
    DROP TABLE tb
    GO
    CREATE TABLE tb(id int identity(1,1),name varchar(10))
    go
    insert tb SELECT 'a'
    UNION ALL SELECT  'b'
    go
    create proc k4
    @name varchar(10)
    as
    declare @n int
    insert tb
    values(@name)
    set @n=(select max(id) from tb )
    print '现在的ID为'+rtrim(@N)
     
    exec k4 '小麦'现在的ID为3
    go