如果是SQL2005及以上版本的MSSQL,
可以在insert语句里用output子句,获取该新增的最大值(如下例子).就不会有并发执行的问题.-- 建测试表
create table wx(c1 int,c2 varchar(10))-- 建临时表
create table #t(c1 int)insert into wx(c1,c2) 
 output inserted.c1 into #t 
 values(40,'aaa')-- 获取刚insert新增的c1值
select c1 from #t
/*
c1
-----------
40(1 row(s) affected)
*/

解决方案 »

  1.   

    版主 我写的思路跟你的差不多,你帮我看看我这种行不行
    我先获得了一个最大值,放到@MaxID里,这个变量我在定义的时候就是output的,然后给它+1放到insert插入语句里,然后我在程序里在接收这个output,是不是也不会出现并发问题SELECT @MaxID=ISNULL(MAX(ObjID),0)+1 FROM KT_ASSET_CLASS --得到最大值SET @Str='INSERT INTO ' + @TableID + '(ObjID,' + @Column + ')VALUES('+@MaxID+',' + @VALUE + ')';
      

  2.   

    可能有并发问题喔,当有2个进程并行执行时,获取的@MaxID有可能是一样的,所以插入目标表也是一样的值..