出现这种情况应该是@@identity的值为null所至

解决方案 »

  1.   

    测试:create table #t(
    a int identity(1,1),
    b varchar(10)
    )insert into #t (b) values (str(@@identity+1)) --第一次插入,@@identity为null,所以b为null
    select * from #t
    insert into #t (b) values (str(@@identity+1))  --第二次插入,@@identity为1,所以b为2
    select * from #t
    drop table #t
      

  2.   

    在查询分析器里面执行正常可能是因为之前做过插入更改了@@identity,如果你断开查询分析器的连接,重新打开查询分析器,再执行的话,问题应该就出现了,呵呵
      

  3.   

    就想上面的列子,如果你是重新打开查询分析器第一次执行,结果是(所影响的行数为 1 行)a           b          
    ----------- ---------- 
    1           NULL(所影响的行数为 1 行)
    (所影响的行数为 1 行)a           b          
    ----------- ---------- 
    1           NULL
    2                    2(所影响的行数为 2 行)接着执行一次,结果就变成(所影响的行数为 1 行)a           b          
    ----------- ---------- 
    1                    3(所影响的行数为 1 行)
    (所影响的行数为 1 行)a           b          
    ----------- ---------- 
    1                    3
    2                    2(所影响的行数为 2 行)呵呵
      

  4.   

    果然,多谢wanyingsong(豌豆) 兄!顺便问一下,如果我想得到这样的字符串,如“本行id,70,55,1”
    执行Insert操作前,是不是一定要先“select ”再“insert”?
      

  5.   

    insert into table1(col1,col2,col3)
    select
    '1','2','3'
    --a,b,c from table2
    --exec('select ...')
      

  6.   

    其实问题是这样的,我想在插入一条新的记录同时,得到它的“id”(id为自增字段),这个id与另一字符串组成新的字符串同时插入另一列,我试过下面的语句,可是不行:
    insert into folder(type,name,plist) 
    values('2','hhhhhhh',ltrim(str((@@IDENTITY+1)))+',70,55,1,-1') 得到的@@IDENTITY总为空值
    一个办法就是:先插入,然后再更新。不知道哪位有更好的办法,请赐教!
    正在郁闷中ing !
      

  7.   

    写一个储存过程吧
    ...
    --插入一条新的记录
    set @var = scope_identity()   --得到它的"id"
    exec(@sql) --sql里面将id插入