日期:2014-05-18  浏览次数:20534 次

exec 简单问题请教
如下:
SQL code

declare @0 varchar(8000)
select @0=''
select @0=@0+a from #tmp0 where gid=0
exec('select  js_no,js_yxdate,js_xlm,js_ch,js_fbtime,js_bclx '+@0+' 
into #
from djjj  where js_hc=0 and js_xlm= case '''' when  ''''  then js_xlm else '''' end and js_yxdate between  ''2011-11-20'' and ''2011-11-20''group by js_no,js_yxdate,js_xlm,js_ch,js_fbtime,js_bclx ')


执行后,想查询临时表#查询不到;
直接使用下列语句,则可以查询临时表#
SQL code

select  js_no,js_yxdate,js_xlm,js_ch,js_fbtime,js_bclx 
into #
from djjj  where js_hc=0 and js_xlm= case '' when  ''  then js_xlm else '' end and js_yxdate between  '2011-11-20' and '2011-11-20'
group by js_no,js_yxdate,js_xlm,js_ch,js_fbtime,js_bclx

exec 执行 select 语句,为什么查询临时表就会提示该表不存在呢?

------解决方案--------------------
呵呵,那个表在动态语句的会话里.
不在你当前的这个会话里.
改成 全局的变量就可以了.
--into ##


------解决方案--------------------
SQL code

--给你举个例子,你一看就明白当前会话的意思了
exec('create table #t(id int)')
exec('select * from #t')
/*
invalid object name '#t'.
*/
exec('create table #t(id int) select * from #t')
/*
id
-----------

(0 row(s) affected)
*/

------解决方案--------------------
SQL code

declare @0 varchar(8000)
select @0=''
select @0=@0+a from #tmp0 where gid=0
exec('select  js_no,js_yxdate,js_xlm,js_ch,js_fbtime,js_bclx '+@0+' 
into #
from djjj  where js_hc=0 and js_xlm= case '''' when  ''''  then js_xlm else '''' end and js_yxdate between  ''2011-11-20'' 
and ''2011-11-20''group by js_no,js_yxdate,js_xlm,js_ch,js_fbtime,js_bclx 
select * from #
')

------解决方案--------------------
探讨
谢谢各位。
方法一行不通,因为后面的语句要多次用到临时表#;
方法二创建全局的临时表,多个人同时执行该存储过程时,会不会提示该表已存在??



引用:
SQL code

declare @0 varchar(8000)
select @0=''
select @0=@0+a from #tmp0 where gid=0
exec('sel……

------解决方案--------------------
探讨

请教小F:
若干人同时执行该存储过程,会不会出现我刚创建了表##tb,就被别人drop 掉了?


引用:
引用:
谢谢各位。
方法一行不通,因为后面的语句要多次用到临时表#;
方法二创建全局的临时表,多个人同时执行该存储过程时,会不会提示该表已存在??



引用:
……