web-dev-qa-db-fra.com

Comment envoyer les enregistrements d'une table dans un corps de courrier électronique à l'aide du package SSIS?

J'ai une table appelée Produit.

La table de produit a plus d'enregistrements, Parfois la table n'a pas d'enregistrement.

Je veux donc vérifier le tableau des produits,

if it's have the records i send all table information as mail.

if it's not have record no need to send mail.

Aidez-moi, s'il vous plaît.

12
kanth

Voici une option possible. L'exemple suivant peut vous donner une idée de la façon dont vous pouvez envoyer un ensemble de résultats par e-mail à l'aide de Send Email task. Cet exemple montre comment parcourir le jeu de résultats de la requête pour former le corps du message qui sera ensuite envoyé par e-mail à l'aide de Send Email task.

Si vous ne souhaitez pas envoyer d'e-mail lorsque le jeu de résultats est vide, vous pouvez ajouter un Expression à la contrainte de priorité entre Jeu de résultats de la boucle et Envoyer un e-mail tâches.

L'exemple utilise SSIS 2008 R2 et la base de données SQL Server 2008 R2.

Processus étape par étape:

  1. Créez une table nommée dbo.EmailData en utilisant le script fourni dans la section Scripts SQL.

  2. Capture d'écran # 1 montre des exemples de données qui Execute SQL task va l'interroger et l'envoyer dans un e-mail dans cet exemple.

  3. Sur le package SSIS, créez des variables 5 comme indiqué dans la capture d'écran # 2.

  4. Sur le package SSIS, placez les tâches suivantes: Execute SQL task, Foreach loop container, Script task dans le conteneur de boucle Foreach et Send Email task.

  5. Configurez le Execute SQL task comme illustré dans les captures d'écran # et # 4.

  6. Configurez le Foreach loop container comme illustré dans les captures d'écran # 5 et # 6. La section Mappages de variables montre l'ordre dans lequel les colonnes de résultats de requête apparaissent et comment elles sont affectées aux variables SSIS. Ces variables seront utilisées pour former le message électronique à l'intérieur du Script task.

  7. Dans le Script task, remplacez le code par celui indiqué dans la section Script task code. La tâche de script a un formatage de message électronique en texte brut très simple.

  8. Configurez la tâche Envoyer un e-mail comme indiqué dans la capture d'écran # 7. Vous devez le configurer avec une adresse e-mail valide dans les champs De et À.

  9. Après avoir configuré les tâches de flux de contrôle, votre package devrait ressembler à celui illustré dans la capture d'écran # 8.

  10. L'exemple d'exécution de paquet est montré dans la capture d'écran # 9.

  11. Les e-mails envoyés par le package sont affichés dans la capture d'écran # 1. Certaines informations ont été supprimées de la capture d'écran. Vous pouvez comparer les données du tableau présentées dans la capture d'écran # 1 avec cette sortie e-mail et elles devraient être identiques.

J'espère que cela pourra aider.

Scripts 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

Code de tâche de script:

C # code utilisable uniquement dans 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;
        }
    }
}

Capture d'écran # 1:

1

Capture d'écran # 2:

2

Capture d'écran # 3:

3

Capture d'écran # 4:

4

Capture d'écran # 5:

5

Capture d'écran n ° 6:

6

Capture d'écran # 7:

7

Capture d'écran # 8:

8

Capture d'écran # 9:

9

Capture d'écran # 10:

10

59
user756519

Vous pouvez appliquer une approche différente. Il suffit d'exécuter une tâche de base de données SQL à partir de SSIS pour exécuter SP "uniquement si vous souhaitez spécifiquement que l'étape SSIS soit exécutée" (ou vous pouvez simplement créer SPand la planifier dans le travail) et à l'intérieur du SP vous pouvez envoyer un e-mail. au cas où, si vous ne savez pas comment configurer le profil de messagerie, reportez-vous à ceci ( https://www.codeproject.com/Articles/485124/Configuring-Database-Mail-in-SQL-Server )

exemple comme ci-dessous -

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
1
Manoj Kargeti