不用mssql的存储过程

解决方案 »

  1.   

    是这样吗
    insert 语句
    加入之后再
    select Max(id)
      

  2.   


         string commandText = "insert into Posts(Category,Title,Detail)values(1,'11','22') select @@IDENTITY";
                int id = (int)SqlHelper.ExecuteScalar(CommandType.Text, commandText);
      

  3.   

    insert into Posts(Category,Title,Detail)values(1,'11','22'); select @@IDENTITY
      

  4.   

     看看SQL语法先,别忘了分号
      

  5.   

    int 新增ID = (int)数据表.Tables["表"].Rows[数据表.Tables["表"].Rows.Count - 1][0];
    -----------------------------------------
    癸巳〖蛇〗 丁巳月 壬寅日
     二〇一三年 四月   廿七|芒种
     双子座 庚申时 
      

  6.   

    sqlserver这个比较好:SELECT SCOPE_IDENTITY()
      

  7.   

    插入数据的同时,out出最大的ID
      

  8.   

    不用系统函数,用max可能会遇到并发的问题。当然,貌似也没有其他的好办法了。
    MSSQL这个IDENTITY相当的讨厌。最恨在系统中遇到这种类型的主键。
      

  9.   

    也可以 select top 1 ID from table1 order by ID desc 
      

  10.   

    http://www.cnblogs.com/leotan/archive/2010/09/13/1825324.html SCOPE_IDENTITY
      

  11.   

    你可以把ID作为一个双向的参数类型,这样,当你保存完以后,值会返回到你的程序中,直接就能得到。这样比较适合用存储过程,参数来处理。如果是sql,这个,一般的还容易处理,要是并发的情况下,就有点小麻烦,还是建议你用存储过程,然后参数来处理。
      

  12.   

    获取刚刚插入的表的自增ID值:
    有3个方法
    1、select @@identity :返回当前会话的所有作用域中的任何表最后生成的标识值(全局的,如果你插入表a,又插入表b,此时返回b表的id)
    2、select SCOPE_IDENTITY() :返回当前会话和当前作用域中的任何表最后生成的标识值 (是当前会话的,如果你插入表a,又插入表b,此时返回b表的id)
    3、select ident_current(‘表名'):返回特定表最后生成的标识值 (不受作用域和会话的限制)
    在实际应用中,使用第3种方式在并发比较大的时候,可能会造成问题,例如下面的代码:
    insert into table1(xxx) values(xxx); select ident_current('table1');
    上面这句sql,在并发用户很多的时候,很有可能返回的并不是刚刚插入的那个id,而有可能是其它线程插入的id(因为ident_current是跨所有会话的)
    参考:http://beinet.cn/Blog/BlogShow.aspx?id=0ff6e08a-176e-48dc-9baf-f3c6daa4fa91