INSERT INTO Friends(playerid,nickname,targetid,type,state) VALUES(33, '222', 55, 2, 200 ) select @@identity 如何可以得到主键值(不知这样表达有误不,我指的是自动递增 且为主键那字段)

解决方案 »

  1.   

    当然取得自增列可以用@@identity
      

  2.   

     create table tt(id int identity(1,1) ,idx varchar(50))
    insert into tt values('a')select @@identity
    select * from tt
    /*
    ---------------------------------------
    5(1 行受影响)id          idx
    ----------- --------------------------------------------------
    1           a
    2           a
    3           a
    4           a
    5           a(5 行受影响)
    */
      

  3.   

    自动递增列不一定是主键列,
    自动递增列是不能插入的,
    select @@identity 是得到自动递增列的最新值查询主键列
    sp_pkeys 表名
      

  4.   

    INSERT INTO Friends(playerid,nickname,targetid,type,state) VALUES(33, '222', 55, 2, 200 ) 
    ;
    select @@identity加个分号试试
      

  5.   

    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。 @@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域
    这东西应该对你有用。
      

  6.   

    使这个意思吗CREATE PROC GetZhouJi 
    @in_Day as VARCHAR(20) 
    ,@out_zhouji as varchar(10) output 
    as 
    if isdate(@in_Day)=1 
    select @out_zhouji= 
    case datepart(dw,@in_Day) 
    when 1 then '日曜日' 
    when 2 then '月曜日' 
    when 3 then '火曜日' 
    when 4 then '水曜日' 
    when 5 then '木曜日' 
    when 6 then '金曜日' 
    when 7 then '土曜日' 
    end 
    else 
    select @out_zhouji='ERROR' 
    godeclare @s as varchar(10) exec GetZhouJi '1985-07/20',@s output select @s 
    /*----------
    土曜日(1 行受影响)
    */
      

  7.   

    各位...小弟是想得到刚插入那条记录的主键的值难道是这样 int i = INSERT INTO Friends(playerid,nickname,targetid,type,state) VALUES(33, '222', 55, 2, 200 ) select @@identity 这样返回的是受影响的函数... 
      

  8.   

    DECLARE @I INTINSERT INTO Friends(playerid,nickname,targetid,type,state) VALUES(33, '222', 55, 2, 200 ) 
    select @I=@@identity SELECT @I
      

  9.   

    写一个存储过程,包含一个输出的参数。
    create procedure ab(@maxid int output) as
    insert into .....
    select @maxid=@@identity然后调用存储过程:
    declare @i int
    set @i=0
    ab @i
    不过我不知道如果同时多人插入数据,获得的@@identity还是否准确。所以对于要得到@@identity的插入操作,我都是在客户端程序里写的。