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

xp_sendmail @query 是否只能用##table? 有办法用#table 吗?
按照微软的解释:因为@query会生成另一个联接来执行查询,与执行xp_sendmail 是两个不同的联接,所以在@query中只能select a,b,c from ##table .我想问有没有办法让它可以实现select a,b,c from #table 呢?

以下是我自已想到的办法:
虽然不能用局部临时表,但也不一定要用全局临时表,下面的代码是用的表变量: 

Declare @sql varchar(1000) 
set @sql = 'Declare @tablewarehouse table(fieldname varchar(10), value varchar(100))  
insert into @tablewarehouse values ( ' 'warehouse ' ', @Warehouse) 
insert into @tablewarehouse values ( ' 'address ' ', @Address) 
insert into @tablewarehouse values ( ' 'prefix ' ', @Prefix) 
select * from @tablewarehouse for xml raw' 

exec master.dbo.xp_startmail  

exec master.dbo.xp_sendmail @recipients=@EmailAddress,  
@query =@sql, 
@message = 'Attached xml file. ',  
@attach_results = 'TRUE ', @width =200, 
@subject = 'Check Warehouse '


问题又出来了,set @sql='............'里不能有变量,否则会提示:
Must declare variable @*** 因为是不同的进程,变量不能共享
有什么办法没有? 用表变量或者是局部临时表?

------解决方案--------------------
定义一临时表,将exec的结果放到该临时表中。
insert into #t(...) exec @sql