@@IDENTITY
返回最后插入的标识值。语法
@@IDENTITY返回类型
numeric注释
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。 @@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。

解决方案 »

  1.   

    参考一下这里:http://community.csdn.net/Expert/TopicView.asp?id=3185384
      

  2.   

    如果还不懂的话我有具体的例子[email protected]
      

  3.   

    写SQL语句:SELECT MAX(ID)FROM 表
    得到最新的ID
      

  4.   

    阿球兄不错,一个SQL命令的事物完整性由DBMS保证,不会出现事务问题,自动编号是INT型的,如果大于上限,当然会报错,如果真有海量的记录,那就自己来手工编号好了!
      

  5.   

    这种方法得到的id 就是你刚插入的那条记录的id.
    没什么值得担心的.
      

  6.   

    使用存储过程:
    ---------------------
    CREATE PROCEDURE AddOrder
          @OrderDate  datetime
    AS   INSERT INTO  Orders(OrderDate)
       VALUES (@OrderDate)
       return @@identity
    GO------------------------------------------------------
    private void butLoad_Click(object sender, System.EventArgs e)
    {   
          string sCmdText="SELECT OrderID,OrderDate,ShipName FROM Orders;" +
    "SELECT ProductID,UnitPrice FROM Products ;" +
     "SELECT * FROM [Order Details]";
         SqlDataAdapter da=new SqlDataAdapter(sCmdText,Cnn);
         DataSet ds=new DataSet(); try
    {
                    //表名映射,添加主键信息
    da.MissingSchemaAction=MissingSchemaAction.AddWithKey;
    da.TableMappings.Add("Table","Orders");
    da.TableMappings.Add("Table1","Products");
    da.TableMappings.Add("Table2","Order Details"); da.Fill(ds);
    //添加约束关系
    ds.Relations.Add("PK_OrderID",ds.Tables["Orders"].Columns["OrderID"],
     ds.Tables["Order Details"].Columns["OrderID"]);
    ds.Relations.Add("PK_ProductId",ds.Tables["Products"].Columns["ProductID"],
    ds.Tables["Order Details"].Columns["ProductID"]); dataGrid1.DataSource=ds;
                    //
    //添加新行
    //
    //add Order Row
                    DataRow OrderRow=ds.Tables["Orders"].NewRow();
                    OrderRow["OrderID"]=0;
    OrderRow["OrderDate"]=DateTime.Today;
    ds.Tables["Orders"].Rows.Add(OrderRow);
                    //add order detail Row
    DataRow ProductRow=ds.Tables["Products"].Rows.Find(1);
    DataRow DetailRow=ds.Tables["Order Details"].NewRow();
                    DetailRow["OrderID"]=0;
                    DetailRow["ProductID"]=ProductRow["ProductID"];
    DetailRow["UnitPrice"]=ProductRow["UnitPrice"];
                    DetailRow["Quantity"]=50.5;
    DetailRow["Discount"]=0.00;
    ds.Tables["Order Details"].Rows.Add(DetailRow); }
    catch(Exception ee)
    {
    MessageBox.Show(ee.ToString());
    }
    //
    //开始事务更新
    //    
    SqlTransaction tsn=Cnn.BeginTransaction();
    try
    {       //
    //更新Orders table
    //
    //更新命令为一储存过程
    SqlCommand Cmd=new SqlCommand("AddOrder",Cnn,tsn);
    Cmd.CommandType=CommandType.StoredProcedure;
    //添加参数
    SqlParameter param=Cmd.Parameters.Add("@OrderID",SqlDbType.Int);
    param.SourceColumn="OrderID";
    param.Direction=ParameterDirection.ReturnValue;
                                           param=Cmd.Parameters.Add("@OrderDate",SqlDbType.DateTime);
    param.SourceColumn="OrderDate";
    param.SourceVersion=DataRowVersion.Current; da.InsertCommand=Cmd;
    da.Update(ds,"Orders");
    //
    //Insert [Order Details] New Row
    //
    string sInsert="INSERT [Order Details]" +
    "(OrderID,ProductID,UnitPrice,Quantity,Discount) " +
    "VALUES(@OrderID,@ProductID,@UnitPrice,@Quantity,@Discount)";
    //Add Parameters
    Cmd=new SqlCommand(sInsert,Cnn,tsn); param=Cmd.Parameters.Add("@OrderID",SqlDbType.Int);
    param.SourceColumn="OrderID";
    param.SourceVersion=DataRowVersion.Current; param=Cmd.Parameters.Add("@ProductID",SqlDbType.Int);
    param.SourceColumn="ProductID";
    param.SourceVersion=DataRowVersion.Current; param=Cmd.Parameters.Add("@UnitPrice",SqlDbType.Money);
    param.SourceColumn="UnitPrice";
    param.SourceVersion=DataRowVersion.Current; param=Cmd.Parameters.Add("@Quantity",SqlDbType.SmallInt);
    param.SourceColumn="Quantity";
    param.SourceVersion=DataRowVersion.Current; param=Cmd.Parameters.Add("@Discount",SqlDbType.Real);
    param.SourceColumn="Discount";
    param.SourceVersion=DataRowVersion.Current;

    da.InsertCommand=Cmd;
    da.Update(ds,"Order Details");
    //
    //提交事务
    //
    tsn.Commit();
    MessageBox.Show("go look");
    }
    catch(Exception ee)
    {
    tsn.Rollback();     //回滚事务
    MessageBox.Show(ee.ToString());
    }
    finally
    {
    tsn.Dispose();
    ds.Dispose();
    da.Dispose();
    }
    }
      

  7.   

    CREATE PROCEDURE? AddOrder ( @OrderID INT OUT,@CustomerID NCHAR(5),@OrderDate DATETIME)ASINSERT INTO Orders(CustomerID ,OrderDate ) VALUES( @CustomerID , @OrderDate)--SELECT @OrderID = @@IDENTITY//如果加了触发器有可能出现问题SET @OrderID = SCOPE_IDENTITY()GO