我在ssis包中运行了这个sql语句。我已经硬编码了电子邮件地址。我如何将其作为变量传递并外化变量,并可以从配置文件中传递值?
@PackageStartTime
是系统启动时间。我已声明该变量并使用@[System::StartTime]
在属性窗口中设置表达式并计算该表达式。但是当我运行这个包时,当它遇到这个特定的任务时,就会卡在那里说PackageStartTime
参数未被识别,结果属性设置不正确。
这是我的代码:
DECLARE @PackageStartTime Varchar(250)
SET @PackageStartTime =?
IF (SELECT COUNT(*) FROM [dbo].[Table1] WHERE RowCDate >= @PackageStartTime) > 0
BEGIN
DECLARE @SUB Varchar(250)
SET @SUB = 'File Failed' + @@SERVERNAME
DECLARE @BODY Varchar(250)
SET @BODY = 'File Failed' + @@SERVERNAME
EXEC msdb.dbo.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
知道如何解决这两件事吗?
提前致谢。
答案 0 :(得分:1)
Maina,我刚回复了你关于这个主题的另一篇文章。到目前为止,我遇到了三个帖子。您在此问题中提出的问题非常笼统,答案可以在任何好书中找到(例如Professional Microsoft SQL Server 2008 Integration Services)。您还可以在许多网站上找到完整的逐步答案(但不要将它们用作书籍的替代品;否则您对SSIS的了解可能仍然不完整。
话虽如此,这里有两个链接可以回答你的问题: 1.传递变量:https://www.simple-talk.com/sql/ssis/passing-variables-to-and-from-an-ssis-task/(实际上,似乎我之前也已将此链接发送给您。)
首先关注第1项。练习之后,创建一个新的Execute sql任务,并将其中的大量代码放入其中:
DECLARE @PackageStartTime Varchar(40)=?; SELECT COUNT(*)FROM [dbo]。[Table1] WHERE RowCDate> = @PackageStartTime;
并将此行计数存储在包变量iCount中。返回值是通过ResultSet属性完成的。如果您能够使此任务有效,则可以提高您对执行SQL任务的熟练程度。