1

SSISパッケージにdbメールを送信する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パッケージに移動して、そこで変更を適用する必要があります。それを変数として作成し、構成ファイルに入れるなど、他の方法はありますか?したがって、値が時間の経過とともに変化する場合、誰かが先に進んで構成ファイルに変更を加えることができます。

前もって感謝します。

4

3 に答える 3

1

パラメータとして渡します。そのような例の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開発者のエネルギッシュなチーム)に知らせてください。

于 2013-03-09T01:41:25.787 に答える
0

このようなテーブルから受信者のリストを取得することもできます。EmailAddressフィールドを持つEmployeeListという名前のテーブルがあるとします。

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....
于 2013-03-09T03:24:56.290 に答える
0

マイナさん、質問/15351282 に関するページにあるあなたのコードを見ました。

  1. 一般的なコメント: コンポーネントと、それらに割り当てる責任の量について考えてください。これは、クリーンで管理しやすく効率的なコードを作成するための非常に重要な概念/プラクティスです。

  2. ここでいくつかの詳細: コード内で if ステートメントを実行し、電子メールを送信するかどうかを決定します。2 つの部分に分割します。コントロール サーフェスには、最初の 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. パラメータを正しい順序で渡していることを確認してください。それでも失敗する場合は、パラメーター マッピングのスクリーン ショットを追加してください。
于 2013-03-16T11:50:48.227 に答える