Html SSIS将参数值传递给发送电子邮件的存储过程

Html SSIS将参数值传递给发送电子邮件的存储过程,html,sql-server,ssis,Html,Sql Server,Ssis,我正在使用SQL Server 2014和SSIS 我的场景:我有一个检查文件的SSIS项目-路径存储在名为FilePath的包参数中 如果未找到任何文件,则会触发SQL Server存储过程SP_EmailNoFiles,该存储过程会根据公司网络策略发送电子邮件SSIS服务器无法中继电子邮件,因此我正在使用SQL Server中的存储过程发送电子邮件 我的问题:是否可以将包参数FilePath的值传递给SP_EmailNoFiles存储过程,以便它可以显示在正文中 我已执行的步骤: 创建了执行

我正在使用SQL Server 2014和SSIS

我的场景:我有一个检查文件的SSIS项目-路径存储在名为FilePath的包参数中

如果未找到任何文件,则会触发SQL Server存储过程SP_EmailNoFiles,该存储过程会根据公司网络策略发送电子邮件SSIS服务器无法中继电子邮件,因此我正在使用SQL Server中的存储过程发送电子邮件

我的问题:是否可以将包参数FilePath的值传递给SP_EmailNoFiles存储过程,以便它可以显示在正文中

我已执行的步骤:

创建了执行SQL任务以在没有文件时调用SP_EmailNoFiles 在参数映射中,我添加了变量$Package::FilePath,数据类型=NVARCHAR,参数名称=0 在SP_EmailNoFiles存储过程中,我声明了文件路径并将值设置为? 但是,SQL Server不喜欢这种情况,并声明: “?”附近的语法不正确

这是我的代码:

DECLARE @ProfileName NVARCHAR(50)
DECLARE @Recipients NVARCHAR(250)
DECLARE @Subject NVARCHAR(255)
DECLARE @FilePath NVARCHAR(255)

SET @ProfileName = 'zzzzzz'
SET @Recipients = 'me@test.com'
SET @Subject = 'source file missing' 
SET @FilePath = ?

-- Build Email Body ---
DECLARE @Body NVARCHAR(MAX)

SET @Body =
'<html>
<body>
  <table class="outer">
    <tr>
      <td class="header">
        <h3>' + @Subject + '</h3>
        blah blah blah no files detected <br>
        Check the folder path. ' + @FilePath + '<br><br>
        <br>
      </td>
    </tr>
    <tr>
      <td>' +
        '<br>
      </td>
    </tr>
</body>
</html>'

-- Send Mail -----
EXEC msdb.dbo.sp_send_dbmail  
                @profile_name = @ProfileName,  
                @recipients = @Recipients,  
                @body = @Body,  
                @subject = @Subject,
                @body_format = 'HTML';
我想要的可能吗?简单回顾一下,我想将FilePath的值传递到在存储过程SP_EmailNoFiles中创建的HTML电子邮件的正文中


谢谢。

我会将其创建为一个存储过程,让我们将其称为usp_invoke_message,该消息应该通过来自执行sql任务的调用来调用,该任务将为filepath传递一个值。在TSQL中,只有以at@符号开头的变量。中的问号仅用于SSIS中的SQL任务

create procedure usp_invoke_message 
@filepath nvarchar(255)
as
begin

set nocount on
DECLARE @ProfileName NVARCHAR(50)
DECLARE @Recipients NVARCHAR(250)
DECLARE @Subject NVARCHAR(255)

SET @ProfileName = 'zzzzzz'
SET @Recipients = 'me@test.com'
SET @Subject = 'source file missing' 


-- Build Email Body ---
DECLARE @Body NVARCHAR(MAX)

SET @Body =
'<html>
<body>
  <table class="outer">
    <tr>
      <td class="header">
        <h3>' + @Subject + '</h3>
        blah blah blah no files detected <br>
        Check the folder path. ' + @FilePath + '<br><br>
        <br>
      </td>
    </tr>
    <tr>
      <td>' +
        '<br>
      </td>
    </tr>
</body>
</html>'

-- Send Mail -----
EXEC msdb.dbo.sp_send_dbmail  
                @profile_name = @ProfileName,  
                @recipients = @Recipients,  
                @body = @Body,  
                @subject = @Subject,
                @body_format = 'HTML';

 end

旁注:存储过程不应使用sp_uu前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp_u,并使用其他东西作为前缀——或者根本不使用前缀@谢谢你的提示!没有下划线的sp呢?问题出在sp_uuu前缀上-其他的都可以-包括没有下划线的spunderscore@marc_s好的,谢谢,我们已经有了一个存储过程来做这个。您的意思是直接在SSI“执行SQL任务”中执行上述所有操作吗?恰恰相反。请看我的存储过程。我在过程中使用了一个传入的参数,没有使用“?”。我仍然收到消息:“?”附近的语法不正确,并且在问号删除行下有一条红线,其中@filepath设置为?