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