Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过邮件发送SQL Server中包含作业的查询结果_Sql_Sql Server_Email_Jobs - Fatal编程技术网

通过邮件发送SQL Server中包含作业的查询结果

通过邮件发送SQL Server中包含作业的查询结果,sql,sql-server,email,jobs,Sql,Sql Server,Email,Jobs,我正在尝试通过SQL Server作业发送一封包含查询结果的电子邮件 该查询工作正常,当我在sp_send_dbmail的@query参数中传递一个表时,我面临一个问题 这是我的密码: DECLARE @res TABLE ( SiteCode [nvarchar](50), DateLastODV [datetime] ); INSERT INTO @res SELECT SiteCode ,MAX(DateODV) AS DateLastODV FR

我正在尝试通过SQL Server作业发送一封包含查询结果的电子邮件

该查询工作正常,当我在sp_send_dbmail的@query参数中传递一个表时,我面临一个问题

这是我的密码:

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,Msg 206,级别16,状态2:Conflit d'opérandes类型:表est不兼容avec nvarcharmax


根据的msdn文件

@查询参数需要nvarcharmax类型,而不是表

替换

@query = @res 

编辑:

将此作为作业运行时,请确保SQL代理服务帐户使用的凭据具有执行此类查询的足够权限

出于测试目的,请尝试使用另一个登录名执行

根据

@查询参数需要nvarcharmax类型,而不是表

替换

@query = @res 

编辑:

将此作为作业运行时,请确保SQL代理服务帐户使用的凭据具有执行此类查询的足够权限

出于测试目的,请尝试使用另一个登录名执行

我使用以下代码解决了问题:

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

我使用以下代码解决了我的问题:

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

是否将表变量作为@query的参数传递?根据MSDN,[@query=]'query'是要执行的查询。查询结果可以作为文件附加,也可以包含在电子邮件正文中。查询类型为nvarcharmax,可以包含任何有效的Transact-SQL语句。请注意,查询是在单独的会话中执行的,因此调用sp_send_dbmail的脚本中的本地变量对查询不可用。我想在参数'query'中设置查询结果,在本例中,我将变量'res'传递给'query',尝试类似的操作,@query='SELECT SiteCode,MAXDateODV AS DateLastODV FROM Configuration.ODVCompteur其中yearDateODV=2015 group by SiteCode order by DateLastODV desc'我已经尝试过这个方法,但得到了如下错误:错误格式化查询,可能是无效参数[SQLSTATE 42000]erreur 22050。您是否将表变量作为@query的参数传递?根据MSDN,[@query=]“query”是要执行的查询。查询结果可以作为文件附加,也可以包含在电子邮件正文中。查询类型为nvarcharmax,可以包含任何有效的Transact-SQL语句。请注意,查询是在单独的会话中执行的,因此调用sp_send_dbmail的脚本中的本地变量对t不可用查询。我想在参数'query'中设置查询结果,在本例中,我将变量'res'传递给'query'尝试类似的操作,@query='从Configuration.ODVCompteur中选择SiteCode,MAXDateODV作为DateLastODV,其中yearDateODV=2015按SiteCode分组按DateLastODV排序'I已经尝试过这个方法t遇到这样的错误:错误格式化查询,可能是无效参数[SQLSTATE 42000]erreur 22050。当然,我已经尝试过了,但遇到了这样的错误:错误格式化查询,可能是无效参数[SQLSTATE 42000]erreur 22050。在另一种情况下,查询工作正常。运行作业时,您应该检查提供了哪些凭据。您应该看看这个问题:当然,我已经尝试过这个问题,但出现了这样一个错误:错误格式化查询,可能是无效参数[SQLSTATE 42000]ERRREUR 22050。在另一种情况下,查询工作正常。运行作业时,您应该检查提供了哪些凭据。您应该查看以下问题: