如何能获得mysql中获得自增主键的最大序列号?
比如说:我往数据库中插入一行,主键增加到了10,然后我把这行删除了,我怎么能得到主键列目前的最大的序列号?
@@identity是不是不行?

解决方案 »

  1.   

    SELECT MAX(IDD) FROM TB
      

  2.   


    Select Scope_Identity()就可以获取到了,要跟insert语句在一起.  ACCESS  sql 都是一样的用
    //C#
    string query = "Insert Into Categories (CategoryName) Values (@CategoryName);" +
    "Select Scope_Identity()";
    int ID;
    string connect = @"Server=.\SQLExpress;AttachDbFilename=|DataDirectory|Northwind.mdf;" +
        "Database=Northwind;Trusted_Connection=Yes;";
    using (SqlConnection conn = new SqlConnection(connect))
    {
      using (SqlCommand cmd = new SqlCommand(query, conn))
      {
        cmd.Parameters.AddWithValue("@CategoryName", Category.Text);
        conn.Open();
        ID = (int)cmd.ExecuteScalar();
      }
    }
      

  3.   

    DECLARE @TB TABLE(ID INT IDENTITY(1,1),NUM INT)
    INSERT @TB 
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 UNION ALL
    SELECT 1 SELECT * FROM @TBDELETE @TB WHERE ID=(SELECT MAX(ID) FROM @TB)SELECT @@identity
    /*(所影响的行数为 4 行)ID          NUM         
    ----------- ----------- 
    1           1
    2           1
    3           1
    4           1(所影响的行数为 4 行)
    (所影响的行数为 1 行)                                         
    ---------------------------------------- 
    4(所影响的行数为 1 行)
      

  4.   

    @@IDENTITY
    返回最后插入的标识值。语法
    @@IDENTITY返回类型
    numeric注释
    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。