用execute 与 sp_executesql 比较。我的理解是:
其实用 exec 只要再多一句比如:set @str='***'+@tmp 就可以替代 sp_executesql  输入变量@tmp了但是输出变量怎么处理呢?好象只能用sp_executesql了
还有如何通过sp_executesql 来构造临时表呢?
比如一个临时表的表的结构是动态变化,用sp_executesql 怎么处理呢?
游标好象都可以通过 exec 动态构造 ,可是临时表就不可以,着是为什么呢?比如要实现下面这种功能,怎么处理好呢?
declare @str varchar(200)
set @str='create table #a(id int,name varchar(10)'
--其中#a结构 可能会根据不同情况发生改变
exec(@str)--然后能对#a 进行种操作。

解决方案 »

  1.   

    --然后能对#a 进行种操作。 不可以
    declare @str varchar(200)
    set @str='create table #a(id int,name varchar(10)'
    --其中#a结构 可能会根据不同情况发生改变
    exec(@str+';insert into #a selec 1,2')这样的
    变量的作用域不同,#a在exec里,外面访问不到,键实表或##全局表可以 
      

  2.   

    用execute 与 sp_executesql 比较。 execute->nvarchar,varchar
    sp_executesql->nvarchar
      

  3.   

    用execute 与 sp_executesql 比较。  execute->nvarchar,varchar
    sp_executesql->nvarchar