insert 完了后
使用这个 @@IDENTITY 变量 就可以得到

解决方案 »

  1.   

    这个变量是什么意思??如果在多人系统中,有N个记录几乎同时被新增,这个变量还灵吗?比如说,记录A新增成功,这时记录B也被新增了,那这个变量会是什么?谢谢!
      

  2.   

    楼住你看看MSSQL的联机帮助吧  就知道了
      

  3.   

    SCOPE_IDENTITY 和 @@IDENTITY 的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量,取得插入记录的ID号但是有个问题就是,@@IDENTITY是全局的,所以在他的功能会体现在所有作用域,一个操作,一个触发器,一个存储过程叫做一个作用域,这时候如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果。这时候我们要使用SCOPE_IDENTITY方法来作了。SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
    使用方法:select SCOPE_IDENTITY() as ID from [table]select @@IDENTITY as ID from [table]
    实例:
       sql="SET NOCOUNT ON;insert into [Table](Item) values('"&Item&"')"sql=sql&";select @@IDENTITY as ID from [Table];SET NOCOUNT OFF;"
      

  4.   

    使用输出参数得到,
    CREATE  PROCEDURE AddUser
    (
        @Username     nvarchar(50),
        @Email    nvarchar(100),
        @Password nvarchar(50),
        @UserID   int OUTPUT
    )
    ASINSERT INTO Users
    (
        Username,
        Email,
        Password
    )VALUES
    (
        @Username,
        @Email,
        @Password
    )SELECT
        @UserID = @@Identity
    GO
    ===========
    .net调用存储过程就比较简单了。
      

  5.   

    也就是说,上面的情况下,得到是B的主键值罗?那如何能知道A的主键值呢?是不是只要connection 不close()就还是同一个会话?得到的就是A?
      

  6.   

    如果楼主是指某用户获得他自己“刚刚加入的纪录的id”,来继续操作,那么@@identity是正解,只不过添加纪录和获取@@identity要放在同一个stored procedure中,这样总是返回该操作时的纪录号。如果楼主是指某用户获得“最新的被任意用户加入的纪录的id”,来继续操作,那么要select查询
      

  7.   

    是这样的,我用C#的SQLCommand来执行INSERT的SQL语句,这时我要知道刚才那个语句所新增的记录的主键值。可是当再用SQLCommand来获取@@identity时,这两个语句应该不是同一个域了,而这时我不能保证在两个语句之间没有另一个客户端执行INSERT语句,也就不能保证获得的是本客户端当前新增的记录ID了。
      

  8.   

    SCOPE_IDENTITY 
    如果你SQLCommand来执行INSERT的SQL语句后,如果该connection未关闭,随后通过该connection来获取@@identity仍为同一个域,应该没有问题。