2013-03-08 28 views
1

我在发送数据库电子邮件的SSIS包中有SQL任务。如何使收件人地址动态,所以我可以避免在SSIS包中进行更改?

EXEC sp_send_dbmail @profile_name='default', 
@recipients='[email protected]', 
@[email protected], 
@[email protected], 
@query= 'SELECT DISTINCT FileLoadName 
FROM [dbo].[Table1] WHERE RowCDate >[email protected]', 
@attach_query_result_as_file=1 

但@recipients的价值是硬编码在这里。所以我有一个快速的想法。每次收件人姓名更改时,我都必须转到SSIS包并在其中应用更改。有没有其他的方式来做到这一点,比如将其作为变量并将其放入配置文件中;所以如果数值随着时间的推移而改变,那么有人可以继续前进并在配置文件中进行更改

在此先感谢。

回答

0

将它作为参数传递。一个这样的例子:https://www.simple-talk.com/sql/ssis/passing-variables-to-and-from-an-ssis-task/

注意:我喜欢在代码的开头接收传递的变量。这样,即使我的代码结构发生变化,传递的参数序列也不需要改变。

我还没有触及您为查询设置的值,因为我不明白为什么您的参数@PackageStartTime在引号内。您可以将附加标志作为参数传递给它。

一旦查询已被参数化,相应的变量就可以放入配置中。

DECLARE 
    @p_profile_name AS VARCHAR(100) = ?, 
    @p_receipients AS VARCHAR(MAX) = ?, 
    @p_subject as VARCHAR(100) = ?, 
    @p_body AS VARCHAR(MAX) = ?; 

    EXEC sp_send_dbmail @profile_name= ?, --'default', 
    @recipients= ?,      --'[email protected]', 
    @subject= ?       -- @SUB, 
    @body= ?        -- @BODY, 
    @query= 'SELECT DISTINCT FileLoadName 
      FROM [dbo].[Table1] WHERE RowCDate >[email protected]', 
      @attach_query_result_as_file=1 

,请告诉我们(SSIS同胞开发商的充满活力的团队)知道它是否工作。

+0

感谢您的回复Anoop http://stackoverflow.com/questions/15351282/send-db-mail-task-fails-in-ssis-package-with-errors-related-to-the-parameter – ETLUser 2013-03-15 13:52:39

+0

灿我请回答这个问题? – ETLUser 2013-03-15 13:53:20

0

你也可以从这样的表中获得收件人列表。假设你有一个名为EmployeeList的表,它有一个EmailAddress字段。

DECLARE @emails VARCHAR(500) 
SET @emails = '' 
SELECT @emails = @emails + EmailAddress + ';' FROM EmployeeList 

DECLARE @recipList VARCHAR(500) 
SET @recipList = (select SUBSTRING(@emails, 0, LEN(@emails))) 

然后你可以设置你的收件人列表这样

EXEC sp_send_dbmail @profile_name='default', 
@recipients= @recipList, 
@[email protected], 
etc.... 
0

皮埃尔,我看了有关问题/ 15351282页面上给出你的代码。

  1. 一般性意见:考虑组件和您要分配给他们多少责任。这是编写干净,可管理,高效代码的一个非常重要的概念/实践。

  2. 现在一些细节:在代码内部,您正在执行if语句,然后决定是否应该发送电子邮件。将它分为两​​部分。在控制表面有第一个Execute sql任务。将结果存储在一个变量中。测试这一块,并确保正确的行数存储在你的包变量中。对不起,如果我太精细了。

  3. 使用条件任务来决定是否应执行此sendEmail任务。

  4. 先使用一个简单的查询;删除@attach_query_result_as_file参数。

  5. 在此任务中添加另一个变量:DECLARE @p_PackageStartTime as varchar(40); @query ='SELECT DISTINCT FileLoadName FROM [dbo]。[Table1] WHERE RowCDate> ='+ @PackageStartTime
  6. 确保您按照正确的顺序传递参数。 如果仍然失败,请添加参数映射的屏幕截图。
相关问题