@@IDENTITY returns the last identity value generated for any table in the
current session, across all scopes.

解决方案 »

  1.   

    获取某个表最后生成的标识值,有三种办法:
    1。IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。
    2。@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
    3。SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。(防止返回触发器中的insert的IDENTITY值) 一般来说,使用@@IDENTITY 就可以满足需求,我用了这么久,还没碰到你说的问题,如果出现你说的问题,是不是因为你执行插入的语句和检索最后标识值的语句不在同一个会话中呢?如果是那样,就只能使用第一种方法了。也有可能你在插入操作后有作了其它插入语句,如果第二条插入语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。情况有很多种可能,建议你把出问题的sql语句贴出来,表示一下你问问题的诚意。
      

  2.   

    我试过,用存储过程时可以的,
    不过使用Delphi或其他工具做开发是
    使用ClientDataset控件,在ClientDataset.insert后,用SELECT @@IDENTITY
    AS Id 来取这个值的,每次得到的值都是0,在这种情况下应该如何解决
      

  3.   

    你使用客户端的数据控件,做的添加删除操作,都放在客户端的内存中,在没有最后送往服务器时,都不会在数据库中生效。你取@@IDENTITY值当然也就取不到了。
      

  4.   

    你insert之后,有没有一直保持client和DB Server的连接?如果断开了再select,当然select不到那
      

  5.   

    不用那些自动提交的控件,用SQL语句直接提交,
    IDENT_CURRENT和SCOPE_IDENTITY在6.5没有,如果你的表有触发器,而且触发器里有插入其他有自动ID的表的语句,那@@IDENTITY 取不到正确的数,这个问题不知道有没有人在6.5下能解决!
      

  6.   

    jobs2001(建筑师) (2001-12-29 10:21:24)
     我试过,用存储过程时可以的,
     不过使用Delphi或其他工具做开发是
     使用ClientDataset控件,在ClientDataset.insert后,用SELECT @@IDENTITY
     AS Id 来取这个值的,每次得到的值都是0,在这种情况下应该如何解决调用存储过程后返回值不可以么?