现在我想通过一条sql语句,先将数据插入数据库然后马上得到刚添加进去的id值(id自增),急急急.......

解决方案 »

  1.   

    在建表的时候ID字段就可以设置成自动递加一的啊!不管是ACCESS,SQL Server MySQL都可以实现的.
      

  2.   

    mysql:
    SELECT LAST_INSERT_ID();
    sqlserver:
    SELECT @@IDENTITY
      

  3.   

    自动增加就行了 在建表的时候ID字段就可以设置成自动递加一的啊!不管是ACCESS,SQL Server MySQL都可以实现的.
    oracel的话 只要先建立一个seq然后插入的时候调用就ok了
      

  4.   

    lyazure(Cloe) ( )
    mysql:
    SELECT LAST_INSERT_ID();
    sqlserver:
    SELECT @@IDENTITY
    ==============================
    lyazure(Cloe) 仁兄说的如果存在并发,是不安全的,不能保证是你刚插入的ID楼主可以把你的业务描述一下,或许大家有好的办法帮你解决。
      

  5.   

    好像要用两条语句
    先 insert 插入,再select sequence.nextval from dual 从序列中查下一值
      

  6.   

    先获得最大id数,加1后再插入数据库
       就ok了
      

  7.   

    在Oracle中一般的这样取就行了:序列名.nextval;其中序列要先创建。
      

  8.   

    首先要获得的ID号字段要是int型的自增字段
    比如create table TEST(
    ID int identity,
    a varchar(20)
    )在SQL SERVER里面定义过程
    create proc test @a varchar(20),@id int output
    as
    ...(插入数据的语句)
    SET @id = SCOPE_IDENTITY()
    ...
    这样就可得到当前插入的行的ID,这里必须用SCOPE_IDENTITY()而不能用@@IDENTITY.因为:
    SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域
    在程序里面用一个CallableStatement cstmt = conn.prepareCall("{call test(?,?)}");
    (如何获得Connection对象conn这里就不写了)
    cstmt.setString(1,"测试字符串");
    cstmt.registerOutParameter(2,java.sql.Types.INTEGER);(我们要的是第二个参数传回的值,这里注册一下哪个参数是可以传回数据的,类型要对应存储过程test的参数类型和顺序)
    cstmt.execute();
    int myId = cstmt.getInt(2);(这里同样指定是第二个参数为返回值)这样myId 就是当前插入到数据库的那一行的id号.
      

  9.   

    Select max(id) from Table_ ;
      

  10.   

    insert into t values('a')
    select top 1 id from t order by desc