你用的是局部的临时表,它只在创建它的过程中存在.exec是一个过程,所以exec结束后,临时表就自动删除了,改为全部的临时表吧.

解决方案 »

  1.   

    --不然改成这样:Create Proc Proc_Stack
    --传递参数
    @collist varchar(1000),--传入的需要计算的字符串,格式为"A,B,C,"
    @TableNameA varchar(1000),--需要计算的第一张表
    @TableNameB varchar(1000) --需要计算的第二张表
    as
    declare @sql varchar(8000)
    set @sql='select '
    while charindex(',',@collist)>0
    begin
    set @sql=@sql+left(@collist,charindex(',',@collist)-1)+'='+@TableNameA+'.'+left(@collist,charindex(',',@collist)-1)+'+'+@TableNameB+'.'+left(@collist,charindex(',',@collist)-1)+','
    set @collist=right(@collist,len(@collist)-charindex(',',@collist))
    end
    set @sql=left(@sql,len(@sql)-1)+' from #A a join #B b on '+@TableNameA+'.id='+@TableNameB+'.id'
    exec ('
    select identity(int,1,1)id,* into #A from '+@TableNameA+'
    select identity(int,1,1)id,* into #B from '+@TableNameB+'
    '+@sql+'
    ')