繁体   English   中英

SSIS字符串变量使脚本任务失败

[英]SSIS string variable fails script Task

我有一个SSIS包,它运行几个SQL存储过程,文件任务以及一个xml和脚本任务。 最后的脚本任务发送带有html表,Excel文件附件和电子邮件正文的电子邮件。 我有一个变量,每天用于唯一地标记Excel文件以及唯一地标记电子邮件的主题行。 此变量只是当前日期。 但是,日期最初是在变量值中“硬编码”的。 但是,我决定改为添加一个执行SQL任务,该任务返回并格式化当前日期。 然后填充该每日变量。

我遇到的问题是,当变量的value字段为空时,脚本任务(发送电子邮件)失败。 即使不为空,脚本任务也会失败。 仅当输入当前日期的值时,它才会成功。 因此,仅当该值等于填充该变量的SQL Task的返回值时,它才起作用。

但是,脚本任务获取SQL任务的返回值,而不是变量的“硬编码”值。 我知道这一点是因为我可以在变量的value部分中写入23 august, 2013 (无大写字母),并且电子邮件和文件扩展名中使用的值仍为23 August, 2013 (大写)-的确切返回值SQL任务。

我的问题是,“为什么会发生这种情况?”我在研究中没有找到太多有用的信息。 每天必须写入该值会破坏开始使用SQL Task [填充变量]的目的。 此外,请注意,当我最初添加SQL任务时,即使变量值为空,程序包也成功。 直到我对软件包进行了几次补充之后,我才陷入了这一困境。 任何意见,建议和建议将不胜感激。 非常感谢你。

下面列出了失败的脚本任务的代码。 我所说的每日变量名为InternalStr_FieldingDate

    public void Main()
    {
        String EmailMsgBody = String.Format("<HTML><BODY><P>{0}</P><P>{1}</P></BODY></HTML>"
                                            , Dts.Variables["Config_SMTP_MessageSourceText"].Value.ToString()
                                            , Dts.Variables["InternalStr_CountResultAfterXSLT"].Value.ToString());
        MailMessage EmailCountMsg = new MailMessage(Dts.Variables["Config_SMTP_From"].Value.ToString().Replace(";", ",")
                                                    , Dts.Variables["Config_SMTP_Success_To"].Value.ToString().Replace(";", ",")
                                                    , Dts.Variables["Config_SMTP_SubjectLinePrefix"].Value.ToString() + " " + Dts.Variables["InternalStr_FieldingDate"].Value.ToString()
                                                    , EmailMsgBody);

        //Add Attachment
        String filename = Dts.Variables["fileDailyReport"].Value.ToString();
        System.Net.Mail.Attachment attachment;
        attachment = new System.Net.Mail.Attachment(filename);
        EmailCountMsg.Attachments.Add(attachment);

        //EmailCountMsg.From.
        EmailCountMsg.CC.Add(Dts.Variables["Config_SMTP_Success_CC"].Value.ToString().Replace(";", ","));
        EmailCountMsg.IsBodyHtml = true;

        SmtpClient SMTPForCount = new SmtpClient(Dts.Variables["Config_SMTP_ServerAddress"].Value.ToString());
        SMTPForCount.Credentials = CredentialCache.DefaultNetworkCredentials;

        SMTPForCount.Send(EmailCountMsg);

        Dts.TaskResult = (int)ScriptResults.Success;
    }

如果变量只是为了唯一地命名文件-那么使用SQL任务返回变量似乎并不浪费吗?

更好的选择是从表达式中计算变量。

变量具有与其他属性一样的属性。

您可以将EvaluateAsExpression属性设置为true,然后使用您想要的任何表达式找出日期。 举个例子:

(DT_WSTR, 4 )YEAR(getdate())
+ RIGHT("0" + (DT_WSTR,2)MONTH(getdate()),2)
+ RIGHT("0" + (DT_WSTR,2)DAY(getdate()),2)

将返回一个YYYYMMDD字符串来使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM