我的SSIS包中有SQL任务,它发送数据库电子邮件。
EXEC sp_send_dbmail @profile_name='default',
@recipients='dev@null.com',
@subject=@SUB,
@body=@BODY,
@query= 'SELECT DISTINCT FileLoadName
FROM [dbo].[Table1] WHERE RowCDate >=@PackageStartTime',
@attach_query_result_as_file=1
但@recipients的值在这里是硬编码的。所以我想了一下。每次收件人姓名更改时,我都必须转到SSIS包并在那里应用更改。有没有其他方法可以做到这一点,比如把它变成变量并把它放在配置文件中;因此,如果值随时间变化,有人可以继续在配置文件中进行更改。
提前致谢。
答案 0 :(得分:1)
将其作为参数传递。一个这样的例子: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= ?, --'dev@null.com',
@subject= ? -- @SUB,
@body= ? -- @BODY,
@query= 'SELECT DISTINCT FileLoadName
FROM [dbo].[Table1] WHERE RowCDate >=@PackageStartTime',
@attach_query_result_as_file=1
请让我们(SSIS开发人员的精力充沛的团队)知道它是否有效。
答案 1 :(得分: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,
@subject=@SUB,
etc....
答案 2 :(得分:0)
Maina,我查看了与问题/ 15351282相关的页面上给出的代码。
一般性评论:根据组件和您希望分配给他们的责任来考虑。这是编写干净,可管理且高效的代码的一个非常重要的概念/实践。
现在有些细节:在代码内部执行if语句,然后决定是否应该发送电子邮件。将它分成两部分。在控制界面上有第一个执行sql任务。将结果存储在变量中。测试这一块,并确保在包变量中存储正确的行数。对不起,如果我太精细了。
使用条件任务来决定是否应该执行此sendEmail任务。
首先使用简单查询;删除@attach_query_result_as_file参数。