sql 中插入一条记录。然后 马上就要取他的ID的方法是什么。
怎样做才会更安全准确一点。

解决方案 »

  1.   

    ID是自增量...SELECT   MAX(id)这种是不是不安全呀。。
      

  2.   

    http://www.cnblogs.com/wf5360308/articles/251488.html
    http://www.52web.com/52article/?view-77.htmlHope helpful to you.
      

  3.   

    select id from table where content = 'moumou'
      

  4.   

    建议你的ID是自动生成的编号。然后用隐藏域保存一下。要是ID自动生成,假设我在添加,你也在添加,
    你想实现添加后立即得到ID,但是很有可能得到我的添加后的ID,不知道说的对不对。
      

  5.   

    ID是自增量... SELECT   MAX(id)这种是不是不安全呀。。 
    这种是不安全,
      

  6.   

     /// <summary>
        ///自动获取ID
        /// </summary>
        /// <returns></returns>
        public string getItemNoCong()
        {
            string ItemNo = "U";
            string m_year = DateTime.Now.Year.ToString();
            string m_month = DateTime.Now.Month.ToString();
            string m_day = DateTime.Now.Day.ToString();
            string m_hour = DateTime.Now.Hour.ToString();
            string m_minute = DateTime.Now.Minute.ToString();
            string m_second = DateTime.Now.Second.ToString();
            string m_millisecond = DateTime.Now.Millisecond.ToString();
            string strIP = FSSoft.Common.DNS.DNSUtil.GetIPAddresses();
            strIP = strIP.Replace(".", "");        ItemNo = ItemNo + m_year + m_month + m_day + m_hour + m_minute + m_second + m_millisecond + strIP;
            return ItemNo;
        }
                string useritemid = getItemNoCong();
      

  7.   

    select @@identity  不可以吗
      

  8.   

    SCOPE_IDENTITY()具体内容看sql联机帮助
      

  9.   

    存储过程:
    create procedure infoadd
    @ID int output,
    ...
     AS 
    insert into mytab(...) values (...)
    SET @ID = @@IDENTITY
    GO
      

  10.   

    一般是取数据自增ID
    int i = @Identity
      

  11.   

    SCOPE_IDENTITY() 
    看了有意思。
    好像行。。
    有疑问。。如果 在程序中 使用 同一个SqlConnection 是不是就能取到 最近一次插入的ID呢
      

  12.   

    使用存储过程写安全些。顶 wangkun9999 
      

  13.   

    SCOPE_IDENTITY() @@identity会受同会话中其它作用域的影响,因为它是全局的。比如触发器或者其它。
    比如你ta表上建有触发器,触发器的内容是当ta有新记录时同时插一条记录到tb,
    那么你用@@ideneity时,想取ta上最后的标值列,实际上得到的是tb的。
      

  14.   

    sql="insert into tb(a) value('a');select SCOPE_IDENTITY() as nid"
    rs.open sql,conn,1,3
    set rs=rs.nextrecordset
    response.write rs("nid")
      

  15.   

    ID 必须为主键:第一种方法:
    insert into table1 values(colvalue1,colvalue2)select ident_current('table1')第二种方法:
    insert into table1 values(colvalue1,colvalue2)
    select @@identity通常最好用 自己生成的System.DateItem.Now.ToString("yyyyMMddhhmmssffff") ;
    或者用 GUID.
      

  16.   

    推荐楼主去看看触发器的使用,直接用触发器,然后查inserted临时表的id,立刻就可以提取刚插入的数据的id了~
      

  17.   

    在对数据库关闭连接之前加上在SQL语句加上select @@identity执行一下,用ExecuteScalar()方法可以获取.
      

  18.   

    这以前写的备忘录:http://blog.csdn.net/nhconch/archive/2004/08/17/77295.aspx SQL数据库ID备忘录     
    数据库某字段被设定为IDENTITY时,取得Insert到表里的有三种方式:  IDENT_CURRENT('表名'):返回指定表所生成的最后的IDENTITY值  @@IDENTITY:返回目前session,所有范围(scope)中,任何表生成的最后一个IDENTITY值  SCOPE_IDENTITY:返回目前session及目前范围(scope)中,任何表生成的最后一个IDENTITY值解释:  假设前后分别INSERT到二个具有IDENTITY列的表T1、T2后,@@IDENTITY值为T2最后IDENTITY列值。IDENT_CURRENT('T1')和IDENT_CURRENT('T2')分别为T1和T2的最后IDENTITY列值。  若针对T1写insert trigger,它的内容为插入数据到T2,当执行INSERT命令插入数据到T1后再执行Select SCOPE_IDENTITY(),得到的是T1最后IDENTITY列值,虽然插入数据到T1也会触发触发器执行插入数据到T2,但是,SCOPE_CURRENT()命令的scope并不在insert trigger内。?IDENTITY()一般在select...into内使用,用来新建一IDENTITY列到新表格中。语法:IDENTITY(数据类型[, 起始值, 增值])。  NEWID()返回GUID值。需要在插入语句中指定IDENTITY值时,通过以下方式:
    set IDENTITY_INSERT?表名 on
    insert into 表名 (ID, 列1, 列2) values (0, 列值1, 列值2)
    set IDENTITY_INSERT 表名 off
      

  19.   

    insert into table_name values();select @@identity ;
    sqldatareader rdr执行该语句,得到的就是id
      

  20.   

    db sql="insert into XXX(x,y,z) values("","","");SELECT @@IDENTITY";
    执行加入记录;
    string id = db.sql2str();//里面就是刚才自动生成的序列值
      

  21.   

    string sSQL = "INSERT INTO .... ;\n";
    sSQL += "SET @NewID = @@IDENTITY;";SqlCommand objCommand = new SqlCommand();
    SqlParameter objParameter = objCommand.Parameters.Add("@NewID", SqlDbType.Int);
    objParameter.Direction = ParameterDirection.Output;
    objCommand.CommandText = sSQL;objCommand.ExecuteNonQuery();
    int iNewID = int.Parse(objCommand.Parameters["@NewID"].Value.ToString());
      

  22.   

    通过select @@identity返回最新的自增长ID到一张表中,,,就可以取了
      

  23.   

    Insus.NET的做法,数据库所有表的主键,都是自己写的一个函数生成的.
    所以在存入前,就知道主键是什么了.http://download.csdn.net/source/303596
      

  24.   

    insert into table values(字段,字段)
    select ident_current('table') 这个不错,我刚才实验过了.
      

  25.   

    select @newId=ident_current('table1')
      

  26.   

    database类
    public object ExecuteScalar(string strSql)
        {
            Open();
            SqlCommand cmd = new SqlCommand(strSql,conn);
            object mm=cmd.ExecuteScalar();
            return mm;
        }cmdText = "insert into city_shop (shopname)values ("+google+");          shopid自动增长
    调用
    DataBase db = new DataBase();
    int shopid = Convert.ToInt32(db.ExecuteScalar(cmdText).ToString());
    这样ExecuteScalar同时实现插入并返回首行本人觉得最好的办法
      

  27.   

     @@identity 如果是自动增长的就使用这个 
      

  28.   

    IDENT_CURRENT  返回为任何会话和任何作用域中的特定表最后生成的标识值。  
     
     
    @@IDENTITY  返回为当前会话的所有作用域中的任何表最后生成的标识值。  
     
     
    SCOPE_IDENTITY  返回为当前会话和当前作用域中的任何表最后生成的标识值。(防止返回触发器中的insert的IDENTITY值)  
      

  29.   

    这样是可以的,但是不是必须是:主键是identity生成的,如果主键不是这样生成的话,那就不能这样子了。
      

  30.   

    select @@identity这样不就可以了
      

  31.   


     呵呵,如果你的ID是自增的就可以这样
    insert into tbltest(name,sex,age) values ("test","man","24"); select @@IDENTITY as id from tbltest
    然后用ExecuteScalar()就OK了~,,很简单的,你可以试一下~
      

  32.   

    查询语句后面写SELECT @@IDENTITY得到一个返回值
      

  33.   

    用@@Identity或scope_identity(),但用@@Identity需要注意一点,如果有触发器的话你在这个表里新增一条记录,然后触发器在另一个表里新增一条记录,@@Identity返回的是另一个表里新增记录的ID,所以还是scope_identity()安全些
      

  34.   

    insert into table1 values(colvalue1,colvalue2) 
    select @@identity 
      

  35.   

    在Sql Server中如果是标志列的话可以用
    select @@Identity