发布网友
共1个回答
热心网友
exec(@sql)内生成的表,只在exec函数内部有效,在exec函数是不可见的
局部临时表只局限于创建进程以及创建进程的子进程
那么将存储过程看作是一个进程1,而exec(@sql)则是另一个进程2
根据我上面说的,#temp只会作用于创建它的进程2中
那么要想使#temp贯穿整个存储过程,则需要在存储过程中先用create table #temp来创建这个临时表,这样这个临时表的创建者就升级成了进程1,其他的无论进程2、进程3都是进程1的子进程,这样就都能引用到#temp,此时进程2中的语句就要改写成insert into而不是select into了
不过这个前提是你已知晓表结构,可以固定的创建临时表
否则你只能用exec(@sql)的形式将整个存储过程体都以拼接的方式执行
也就是不通过临时表,直接用exec(@sql)将查询结果输出