Вот один из возможных вариантов.Следующий пример может дать вам представление о том, как вы можете отправить по электронной почте набор результатов, используя Send Email task
.В этом примере показано, как перебрать набор результатов запроса, чтобы сформировать тело сообщения, которое затем будет отправлено по электронной почте с использованием Send Email task
.
Если вы не хотите отправлять электронную почту, когда набор результатов пуст, вы можете добавить Expression
к ограничению приоритета между Loop resultset и Отправка электронной почты задач.
В примере используются базы данных служб SSIS 2008 R2 и SQL Server 2008 R2.
Пошаговый процесс:
Создайте таблицу с именем dbo.EmailData
, используя скрипт из раздела Сценарии SQL .
Снимок экрана # 1 показывает примерданные, которые задача Execute SQL
будет запрашивать и отправлять по электронной почте в этом примере.
В пакете служб SSIS создайте 5 переменных, как показано на скриншоте# 2 .
В пакете служб SSIS поместите следующие задачи: Execute SQL task
, Foreach loop container
, Script task
в контейнере цикла Foreach и Send Email task
.
Сконфигурируйте Execute SQL task
, как показано на скриншотах # 3 и # 4 .
Настройте Foreach loop container
, как показано на рисункеn скриншотов # 5 и # 6 .В разделе «Сопоставление переменных» показан порядок, в котором отображаются столбцы результатов запроса и как они назначаются переменным служб SSIS.Эти переменные будут использоваться для формирования сообщения электронной почты внутри Script task
.
. В Script task
замените код на код, показанный под кодом задачи Script раздел.Задача сценария имеет очень простое форматирование сообщений электронной почты в виде простого текста.
Настройте задачу отправки электронной почты, как показано на снимке экрана # 7 .Необходимо настроить его с действительным адресом электронной почты в полях Из и До .
После настройки задач потока управления ваш пакет должен выглядетькак показано на скриншоте # 8 .
Пример выполнения пакета показан на скриншоте # 9 .
Электронная почта, отправленная посылкой, показана на скриншоте # 10 .Некоторая информация была удалена со скриншота.Вы можете сравнить данные таблицы, показанные на скриншоте # 1 с этим выводом электронной почты, и они должны совпадать.
Надеюсь, это поможет.
Сценарии SQL: .
CREATE TABLE [dbo].[EmailData](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemId] [varchar](255) NOT NULL,
[ItemName] [varchar](255) NOT NULL,
[ItemType] [varchar](255) NOT NULL,
[IsProcessed] [bit] NULL,
CONSTRAINT [PK_EmailData] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
Код задачи сценария:
C # код, который может использоваться только в SSIS 2008 and above
..
/*Microsoft SQL Server Integration Services Script Task
Write scripts using Microsoft Visual C# 2008.
The ScriptMain is the entry point class of the script.
*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
namespace ST_7f59d09774914001b60a99a90809d5c5.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
Variables varCollection = null;
string header = string.Empty;
string message = string.Empty;
Dts.VariableDispenser.LockForWrite("User::EmailMessage");
Dts.VariableDispenser.LockForWrite("User::ItemId");
Dts.VariableDispenser.LockForWrite("User::ItemName");
Dts.VariableDispenser.LockForWrite("User::ItemType");
Dts.VariableDispenser.GetVariables(ref varCollection);
//Set the header message for the query result
if (varCollection["User::EmailMessage"].Value == string.Empty)
{
header = "Execute SQL task output sent using Send Email Task in SSIS:\n\n";
header += string.Format("{0}\t{1}\t\t\t{2}\n", "Item number", "Item name", "Item type");
varCollection["User::EmailMessage"].Value = header;
}
//Format the query result with tab delimiters
message = string.Format("{0}\t{1}\t{2}",
varCollection["User::ItemId"].Value,
varCollection["User::ItemName"].Value,
varCollection["User::ItemType"].Value);
varCollection["User::EmailMessage"].Value = varCollection["User::EmailMessage"].Value + message;
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
Снимок экрана № 1:
Снимок экрана № 2:
Снимок экрана № 3:
Снимок экрана № 4:
Снимок экрана № 5:
Снимок экрана № 6:
Снимок экрана № 7:
Снимок экрана № 8:
Снимок экрана № 9:
Снимок экрана № 10: