我正在尝试通过SQL Server作业发送一封包含查询结果的电子邮件。
查询工作正常,当我在@query
sp_send_dbmail
参数中传递TABLE时遇到问题
这是我的代码:
DECLARE @res TABLE
(
SiteCode [nvarchar](50),
DateLastODV [datetime]
);
INSERT INTO @res
SELECT
SiteCode
,MAX(DateODV) AS DateLastODV
FROM Configuration.ODVCompteur
where year(DateODV) = 2015
group by SiteCode
order by DateLastODV desc
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Foo',
@recipients = 'foo@foooo.com',
@subject = 'Foooooooo',
@query = @res,
@Attach_Query_result_as_file = 0
我收到了这个错误(用法语,但如果需要可以轻松翻译):
第0行:过程:sp_send_dbmail,消息206,级别16,状态2:Conflit de types d'opérandes:table est incompatible avec nvarchar(max)
答案 0 :(得分:3)
我使用此代码解决了我的问题:
DECLARE @count TABLE(SiteCode [nvarchar](50), DateLastODV [datetime])
DECLARE @Separateur varchar(1)
DECLARE @bodyHtml NVARCHAR(MAX)
DECLARE @mailSubject NVARCHAR(MAX)
DECLARE @STMT VARCHAR(100)
DECLARE @RtnCode INT
SET @Separateur=';'
INSERT INTO @count
SELECT
SiteCode
,MAX(DateODV) AS DateLastODV
FROM Configuration.ODVCompteur
where year(DateODV) = 2015
group by SiteCode
order by DateLastODV DESC
BEGIN
IF OBJECT_ID('tempdb..##TEMPTABLE') IS NOT NULL
drop table ##TEMPTABLE
select * into ##TEMPTABLE FROM @count
SET @STMT = 'SELECT * FROM ##TEMPTABLE'
SET @bodyHTML ='Test ODV'
SET @mailSubject ='Supervision ODV'
USE msdb
EXEC @RtnCode = sp_send_dbmail
@profile_name = 'Fooo',
@query_result_separator=@Separateur,
@recipients = 'foooo@foo.com',
@subject = @mailSubject,
@query = @STMT,
@Attach_Query_result_as_file = 0
IF @RtnCode <> 0
RAISERROR('Error.', 16, 1)
END
答案 1 :(得分:1)
@query参数需要nvarchar(max)类型而不是Table。
替换
@query = @res
带
@query = 'SELECT
SiteCode
,MAX(DateODV) AS DateLastODV
FROM Configuration.ODVCompteur
where year(DateODV) = 2015
group by SiteCode
order by DateLastODV desc'
编辑:
将此作为作业运行时,请确保SQL代理服务帐户使用的凭据具有足够的权限来执行此类查询。
出于测试目的,尝试执行另一次登录 execute as