1

いくつかの SQL ストアド プロシージャ、ファイル タスク、および xml とスクリプト タスクを実行する SSIS パッケージがあります。最後のスクリプト タスクは、html テーブル、Excel ファイルの添付ファイル、および電子メール本文を含む電子メールを送信します。毎日、Excel ファイルに一意のラベルを付けたり、電子メールの件名に一意のラベルを付けたりするために使用される変数があります。この変数は単に現在の日付です。ただし、日付はもともと変数の値に「ハードコード」されていました。ただし、代わりに、現在の日付を返してフォーマットする SQL 実行タスクを追加することにしました。次に、その日次変数を設定します。

私が直面している問題は、変数の値フィールドが空の場合、(電子メールを送信する) スクリプト タスクが失敗することです。空でない場合でも、スクリプト タスクは失敗します。現在の日付の値が入力された場合にのみ成功します。したがって、値が変数を設定する SQL タスクの戻り値と等しい場合にのみ機能します。

ただし、スクリプト タスクは、変数の "ハードコードされた" 値ではなく、SQL タスクの戻り値を取得します。23 august, 2013これは、変数の値セクションに (大文字なしで) 記述でき、電子メールとファイル拡張子で使用される値が引き続き23 August, 2013(大文字で) あるため、SQL タスクの正確な戻り値であることを知っています。

私の質問は、私の調査ではあまり有益な情報が見つからなかったということですが、「なぜこれが起こっているのですか?」ということです。毎日値を書き込まなければならないことは、そもそも [変数を設定する] SQL タスクをそこに置くという目的を無効にします。なお、もともと 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;
    }
4

1 に答える 1

0

変数がファイルに一意の名前を付けるだけの場合、変数を返すために 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 文字列を返します。

于 2013-08-27T21:10:31.427 に答える