Productというテーブルが1つあります。
製品テーブルにはより多くのレコードがありますが、テーブルにレコードがない場合があります。
だから私は製品テーブルをチェックしたいのですが、
if it's have the records i send all table information as mail.
if it's not have record no need to send mail.
私を助けてください。
可能なオプションの1つを次に示します。次の例は、Send Email task
を使用して結果セットを電子メールで送信する方法を示しています。この例では、クエリ結果セットをループしてメッセージ本文を形成し、Send Email task
を使用してメールで送信する方法を示します。
結果セットが空白のときに電子メールを送信したくない場合は、Expression
をLoop resultsetの間の優先順位制約に追加できます。メールを送信タスク。
この例では、SSIS 2008 R2およびSQL Server 2008 R2データベースを使用しています。
段階的なプロセス:
SQL Scriptsセクションにあるスクリプトを使用して、dbo.EmailData
という名前のテーブルを作成します。
スクリーンショット#1は、この例のExecute SQL
タスクがクエリして電子メールで送信するサンプルデータを示しています。
SSISパッケージで、スクリーンショット#2に示すように、5変数を作成します。
SSISパッケージで、次のタスクを配置します:Execute SQL task
、Foreach loop container
、Script task
Foreachループコンテナー内およびSend Email task
。
スクリーンショット#3および#4に示すように、Execute SQL task
を構成します。
スクリーンショット#5および#6に示すように、Foreach loop container
を構成します。変数マッピングセクションには、クエリ結果列が表示される順序と、それらがSSIS変数に割り当てられる方法が表示されます。これらの変数は、Script task
内の電子メールメッセージを形成するために使用されます。
Script task
で、コードをScript task codeセクションの下に表示されているコードに置き換えます。スクリプトタスクには、非常に単純なプレーンテキストの電子メールメッセージの形式があります。
スクリーンショット#7に示すように、メール送信タスクを設定します。FromおよびToフィールドに有効なメールアドレスを設定する必要があります。
制御フロータスクを構成すると、パッケージはスクリーンショット#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:
別のアプローチを適用できます。SSISからSQLデータベースタスクを実行して実行するだけですSP "SSISステップを実行したい場合のみ"(または、SPを作成してジョブでスケジュールするだけです) SP内部でメールを送信できます。場合、メールプロファイルの設定方法がわからない場合は、これを参照してください( https://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server )
以下の例-
CREATE TABLE #Temp
(
[Rank] [int],
[Player Name] [varchar](128),
[Ranking Points] [int],
[Country] [varchar](128)
)
INSERT INTO #Temp
SELECT 1,'Manoj Kargeti',12390,'India'
UNION ALL
SELECT 2,'Vimal Kumar',7965,'Nepal'
UNION ALL
SELECT 3,'Pappu Djokovic',7880,'ShriLanka'
DECLARE @xml NVARCHAR(MAX)
DECLARE @body NVARCHAR(MAX)
SET @xml = CAST(( SELECT [Rank] AS 'td','',[Player Name] AS 'td','',
[Ranking Points] AS 'td','', Country AS 'td'
FROM #Temp ORDER BY Rank
FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
SET @body ='<html><body><H3>Tennis Rankings Info</H3>
<table border = 1>
<tr>
<th> Rank </th> <th> Player Name </th> <th> Ranking Points </th> <th> Country </th></tr>'
SET @body = @body + @xml +'</table></body></html>'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'SQL ALERTING', -- replace with your SQL Database Mail Profile
@body = @body,
@body_format ='HTML',
@recipients = '[email protected]', -- replace with your email address
@subject = 'E-mail in Tabular Format' ;
DROP TABLE #Temp