【问题标题】:SSIS Pass parameter value to stored procedure that sends emailSSIS 将参数值传递给发送电子邮件的存储过程
【发布时间】:2019-08-02 04:03:06
【问题描述】:

我使用的是 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 存储过程中,我声明了FilePath 并将值设置为?
  • 但是,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 电子邮件的正文中。

谢谢。

【问题讨论】:

标签: html sql-server ssis


【解决方案1】:

我会将它创建为一个存储过程(我们称之为 usp_invoke_message),它应该通过执行 sql 任务的调用来调用,该任务将传递一个文件路径的值。在 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

【讨论】:

  • 我已经有一个存储过程来执行此操作。您的意思是直接在 SSIS 'Execute SQL Task' 中执行上述所有操作吗?
  • 正好相反。请看我的存储过程。我使用了传入的参数并且没有'?在过程中。
  • 我仍然收到消息:'?' 附近的语法不正确并且问号下面有一条红线
  • 删除了@filepath 设置为的行?
猜你喜欢
  • 2016-11-15
  • 2011-07-12
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2016-04-05
相关资源
最近更新 更多