ID号最大的一条记录就是你想要的记录,前提是字段ID为int类型,标识为TRUE

解决方案 »

  1.   

    max()肯定不对,
    我的意思是:当你添加一条记录并存储的同时,又有人添加一条,想把这个实时变化的值取出,这个值很重要,关系到物资动态的结存
      

  2.   

    小草的方法不对,你那样虽然是最后一个号,但不一定是haitao5676(笑纹)所添加的。
    注意条件应该这样理解:多人同时添加记录,取得自己修改的最后一条记录的ID。
    对吗?haitao5676(笑纹)
      

  3.   

    没明白你的意思,MAX为什么不对???
      

  4.   

    我想这样行不行,你再建一个字段用于存储用户ID的字段,再用 select max(id) from YourTable where UserID='YourID'来解决。
      

  5.   

    max()我们用过,去不出最大值,因为当你在捕捉数据库最大值时有可能还有其他人在添加记录,max()之时在做数据库的静态最大存取,并不是动态的,x_bigman(草胚子)说得有点道理,并不完全对,并不一定是自己修改后的,而是爱服务器繁忙实最后一个添加记录的
    那条流水号
      

  6.   

    我想用max()是不可能完成这项工作的,因为它毕竟是静态的取值,而我要的是一个动态的十分难以捕捉(至少对我来说)的最大值
      

  7.   

    这样行不行,你增加一个Timer控件,让它在你执行添加语句后一秒,再去找那个ID号
      

  8.   

    自己做一个计数器,可以用(1 行 1 列的表)
    只要有人连就:
    Update Counter Set Column1 = Column1 + 1
      

  9.   

    大家投票算了,票数最多的当选!
    临时表:userid,maxid
    加个记录修改自己的最大值,max(maxid)为最大。
      

  10.   

    用MAX取得最大值,保存时就算出错,利用SQL的回卷功能,也可能把数据库恢复到正常的状态!然后再用MAX取最大值。再来保存不就行了!
      

  11.   

    x_bigman(草胚子)说得对。也是较好的方法。为每个用户指定唯一的标识(UserID),让后: SELECT Max(ID) FROM [...] WHERE [UserID]=(user's id)
      

  12.   

    先加锁再max其实是很好的方法,至于用timer则只会造成更大的麻烦。而一个多用户的系统,要限制一个ID在同一时间只能由一个人使用,要真正做得好,也是一件很麻烦的事,比如用户不正常(比如死机)退出呢?怎么可以知道?在多用户版的金蝶财务软件中,对付不正常退出还是要到控制台中手工kill掉。
      

  13.   

    select @@Identity  应该是正确的吧。可以做一个测试:
    同时在一个数据库上打开3个连接(我打开了3个query analyzer),分别执行1条插入语句和
    select @@identity, 3个连接上分别返回的数字可能是 n, n+1, n+2
    再回头到第一个连接上执行select * from table,能够发现其他连接插入的数据,再运行 select @@identity,发现返回的数字并没有因为用其余连接插入数据而改变仍然是 n, 可见 select @@identity是正确的。
      

  14.   

    本人也正要做这样的事情,问题与haitao5676一样。我想了个办法,不知行不行。方法是这样的:数据库里另建一个只有一列StreamNo的表(这个表的StreamNo字段与另一个表中的StreamNo字段是一样的),用来当用户保存记录时把流水号也保存在这里。每当客户端要保存记录时就先到这个表读取最大的流水号+1作为新记录的流水号。请各位高手给点意见!
      

  15.   

    使用触发器吧,只要有人更新你的表,无论是谁,都可以取得最新的最大值!不过这需要你另外建立一张表Max_ID_Table,该表只有一个字段,就是新插入你的表的最大的ID值。CREATE TRIGGER [My_Trigger_Name] ON [dbo].[Your_Table_Name] 
    FOR INSERT
    AS
    declare  @max_id  int
    select  @max_id=max(ID) from inserted
    update  Max_ID_Table
    set  max_id=@max_id然后从表:Max_ID_Table中取出来的就是最新的最大值了。
      

  16.   

    upup
    不管怎样,只要用max()就不会取出这个值了,大家这么踊跃实在叫我感动。谢谢各位,不过还得麻烦各位,在个一点提示
      

  17.   

    xhy88的方法我在实践中已使用了许久,是个挺方便的方法,不过要记得事务管理.
      

  18.   

    强烈建议使用select @@Identity,我也曾经用过一些自己想的注意,但在大量并发性操作下有问题,它是最精确的
      

  19.   

    select max(XXX) as tt from XXX
    select count(XXX) as tt from XXX
      

  20.   

    我的解决办法(歪主意)
    在实际工作中,假定以一篇文章为例,我一般是将文章基本信息(标题、作者等)、正文、点击次数存放在三张表中,index、value、click,文章入库以后经过审核输出为页面。问题就在这儿了,在insert index()后,我势必要取得ID号,然后再向value/click插入数据。但是这个ID号如何取呢?(我们一般是好些人同时录库)方法一、在录入index表时,文章标题用session.sessionID代替,然后select得到ID,再update index。方法二、在index/value/click三表中不以ID为相关字段,而是另设一varchar字段,假定为filename。在录入操作时,取session.sessionid &datediff('s','2000-01-01')值为filename值,然后insert。
    BTW:由于实际的问题,我们的一些应用并不是采用sqlserver,象mysql/oracle/sybase都会用到,因此用select @@Identity的办法并不是很适合。