Verwenden eines Recordsetziels
Das Recordsetziel speichert keine Daten in einer externen Datenquelle. Stattdessen speichert das Recordsetziel Daten im Speicher eines Recordsets, das in einer Integration Services-Paketvariablen des Datentyps Object gespeichert ist. Nachdem die Daten vom Recordsetziel gespeichert wurden, verwenden Sie typischerweise einen Foreach-Schleifencontainer mit dem Foreach-ADO-Enumerator zum Verarbeiten jeweils einer Zeile des Recordsets. Der Foreach-ADO-Enumerator speichert den Wert jeder einzelnen Spalte für die aktuelle Zeile in einer separaten Paketvariablen. Anschließend lesen die im Foreach-Schleifencontainer konfigurierten Tasks diese Werte in den Variablen und führen für diese Aktionen aus.
Sie können das Recordsetziel in vielen verschiedenen Szenarios verwenden. Im Folgenden finden Sie einige Beispiele:
Mit einem Task "Mail senden" und der Integration Services-Ausdruckssprache können Sie für jede Zeile im Recordset eine benutzerdefinierte E-Mail-Nachricht senden.
Mit einer in einem Datenflusstask als Quelle konfigurierten Skriptkomponente können Sie die Spaltenwerte in die Spalten des Datenflusses einlesen. Dann können Sie Transformationen und Ziele verwenden, um die Zeile zu transformieren und zu speichern. In diesem Beispiel wird der Datenflusstask für jede Zeile einmal ausgeführt.
In den folgenden Abschnitten wird zuerst der allgemeine Vorgang bei der Verwendung des Recordsetziels beschrieben, anschließend wird ein spezielles Beispiel für die Verwendung des Ziels gezeigt.
Allgemeine Schritte bei der Verwendung eines Recordsetziels
Im folgenden Verfahren sind die zum Speichern von Daten in einem Recordsetziel und anschließenden Verarbeiten der einzelnen Zeilen mit dem Foreach-Schleifencontainer erforderlichen Schritte zusammengefasst.
So speichern Sie Daten in einem Recordsetziel und verarbeiten jede einzelne Zeile mit dem Foreach-Schleifencontainer
Erstellen oder öffnen Sie ein Integration Services-Projekt in SQL Server-Datentools (SSDT).
Erstellen Sie eine Variable für das vom Recordsetziel im Speicher gespeicherte Recordset, und legen Sie den Variablentyp auf Object fest.
Erstellen Sie zusätzliche Variablen der entsprechenden Typen für die Werte der einzelnen Spalten im zu verwendenden Recordset.
Fügen Sie den Verbindungs-Manager hinzu, der für die Datenquelle für den Datenfluss erforderlich ist, und konfigurieren Sie diesen.
Fügen Sie dem Paket einen Datenflusstask hinzu, und konfigurieren Sie auf der Registerkarte Datenfluss des SSIS-Designers Quellen und Transformationen zum Laden und Transformieren der Daten.
Fügen Sie dem Datenfluss ein Recordsetziel hinzu, und stellen Sie eine Verbindung mit den Transformationen her. Geben Sie für die VariableName-Eigenschaft des Recordsetziels den Namen der Variablen ein, die das Recordset aufnehmen soll.
Fügen Sie auf der Registerkarte Ablaufsteuerung des SSIS-Designers einen Foreach-Schleifencontainer hinzu, und verbinden Sie diesen Container nach dem Datenflusstask. Öffnen Sie dann den Foreach-Schleifen-Editor, um den Container mit den folgenden Einstellungen zu konfigurieren:
Wählen Sie auf der Seite Auflistung den Foreach-ADO-Enumerator aus. Wählen Sie dann unter ADO-Objektquellvariable die Variable aus, die das Recordset enthält.
Ordnen Sie auf der Seite Variablenzuordnungen den nullbasierten Index der einzelnen zu verwendenden Spalten der entsprechenden Variablen zu.
Bei jeder Iteration der Schleife füllt der Enumerator diese Variablen mit den Spaltenwerten aus der aktuellen Zeile auf.
Fügen Sie im Foreach-Schleifencontainer Tasks zum Verarbeiten jeweils einer Zeile des Recordsets durch Lesen der Variablenwerte hinzu, und konfigurieren Sie diese.
Beispiel für die Verwendung des Recordsetziels
Im folgenden Beispiel lädt der Datenflusstask Informationen zu AdventureWorks2012-Mitarbeitern aus der Sales.SalesPerson-Tabelle in ein Recordsetziel. Anschließend liest ein Foreach-Schleifencontainer jeweils eine Datenzeile und ruft einen Task "Mail senden" auf. Der Task "Mail senden" verwendet Ausdrücke zum Senden benutzerdefinierter E-Mail-Nachrichten an die einzelnen Vertriebsmitarbeiter, in der deren Bonussummen angegeben sind.
So erstellen Sie das Projekt und konfigurieren die Variablen
Erstellen Sie in SQL Server-Datentools ein neues Integration Services-Projekt.
Wählen Sie im Menü SSIS den Befehl Variablen aus.
Erstellen Sie im Fenster Variablen die Variablen für das Recordset sowie die Spaltenwerte in der aktuellen Zeile:
Erstellen Sie die Variable BonusRecordset, und legen Sie deren Typ auf Object fest.
Die Variable BonusRecordset enthält das Recordset.
Erstellen Sie die Variable EmailAddress, und legen Sie deren Typ auf String fest.
Die Variable EmailAddress enthält die E-Mail-Adresse der Vertriebsperson.
Erstellen Sie die Variable FirstName, und legen Sie deren Typ auf String fest.
Die Variable FirstName enthält den Vornamen der Vertriebsperson.
Erstellen Sie die Variable Bonus, und legen Sie deren Typ auf Double fest.
Die Variable Bonus enthält den Betrag für den Bonus der Vertriebsperson.
So konfigurieren Sie die Verbindungs-Manager
Fügen Sie im Bereich Verbindungs-Manager des SSIS-Designers einen neuen OLE DB-Verbindungs-Manager hinzu, mit dem eine Verbindung mit der AdventureWorks2012-Beispieldatenbank hergestellt wird, und konfigurieren Sie diesen.
Die OLE DB-Quelle im Datenflusstask verwendet diesen Verbindungs-Manager zum Abrufen von Daten.
Fügen Sie im Bereich Verbindungs-Manager einen neuen SMTP-Verbindungs-Manager hinzu, mit dem eine Verbindung mit einem verfügbaren SMTP-Server hergestellt wird, und konfigurieren Sie diesen.
Der Task "Mail senden" im Foreach-Schleifencontainer verwendet diesen Verbindungs-Manager zum Senden von E-Mail-Nachrichten.
So konfigurieren Sie den Datenfluss und das Recordsetziel
Fügen Sie auf der Registerkarte Ablaufsteuerung des SSIS-Designers der Entwurfsoberfläche einen Datenflusstask hinzu.
Fügen Sie dem Datenflusstask auf der Registerkarte Datenfluss eine OLE DB-Datenquelle hinzu, und öffnen Sie dann den Quellen-Editor für OLE DB.
Konfigurieren Sie auf der Seite Verbindungs-Manager des Editors die Quelle mit den folgenden Einstellungen:
Wählen Sie unter OLE DB-Verbindungs-Manager den zuvor erstellten OLE DB-Verbindungs-Manager aus.
Wählen Sie unter Datenzugriffsmodus die Option SQL-Befehl aus.
Geben Sie unter SQL-Befehlstext die folgende Abfrage ein:
SELECT Person.Contact.EmailAddress, Person.Contact.FirstName, CONVERT(float, Sales.SalesPerson.Bonus) AS Bonus FROM Sales.SalesPerson INNER JOIN Person.Contact ON Sales.SalesPerson.SalesPersonID = Person.Contact.ContactID
Hinweis Sie müssen den currency-Wert in der Bonus-Spalte in den Datentyp float konvertieren, bevor Sie diesen in eine Paketvariable vom Typ Double laden können.
Fügen Sie auf der Registerkarte Datenfluss ein Recordsetziel hinzu, und stellen Sie eine Verbindung mit dem Ziel nach der der OLE DB-Quelle her.
Öffnen Sie den Recordsetziel-Editor, und konfigurieren Sie das Ziel mit den folgenden Einstellungen:
Wählen Sie auf der Registerkarte Komponenteneigenschaften für die VariableName-Eigenschaft User::BonusRecordset aus.
Wählen Sie auf der Registerkarte Eingabespalten alle drei verfügbaren Spalten aus.
So konfigurieren Sie den Foreach-Schleifencontainer und führen das Paket aus
Fügen Sie auf der Registerkarte Ablaufsteuerung des SSIS-Designers einen Foreach-Schleifencontainer hinzu, und verbinden Sie den Container nach dem Datenflusstask.
Öffnen Sie den Foreach-Schleifen-Editor, und konfigurieren Sie den Container mit den folgenden Einstellungen:
Wählen Sie auf der Seite Auflistung unter Enumerator die Option Foreach-ADO-Enumerator und unter ADO-Objektquellvariable die Option User::BonusRecordset aus.
Ordnen Sie auf der Seite Variablenzuordnungen User::EmailAddress Index 0, User::FirstName Index 1 und User::Bonus Index 2 zu.
Fügen Sie auf der Registerkarte Ablaufsteuerung im Foreach-Schleifencontainer einen Task "Mail senden" hinzu.
Öffnen Sie den Editor für den Task "Mail senden", und konfigurieren Sie auf der Seite E-Mail den Task mit den folgenden Einstellungen:
Wählen Sie für SmtpConnection den SMTP-Verbindungs-Manager aus, der zuvor konfiguriert wurde.
Geben Sie unter Von eine entsprechende E-Mail-Adresse ein.
Wenn Sie Ihre eigene E-Mail-Adresse verwenden, können Sie überprüfen, ob das Paket erfolgreich ausgeführt wird. Für Nachrichten, die vom Task "Mail senden" an die fiktiven Vertriebspersonen von AdventureWorks2012 gesendet wurden, erhalten Sie Unzustellbarkeitsmeldungen.
Geben Sie unter An eine Standard-E-Mail-Adresse ein.
Dieser Wert wird nicht verwendet, sondern zur Laufzeit durch die E-Mail-Adresse der betreffenden Vertriebsperson ersetzt.
Geben Sie unter Betreff "Ihr Jahresbonus" ein.
Wählen Sie für MessageSourceType die Option Direkteingabe aus.
Klicken Sie auf der Seite Ausdrücke des Editors für den Task "Mail senden" auf die Schaltfläche mit den drei Punkten (...), um den Eigenschaftsausdrucks-Editor zu öffnen.
Geben Sie im Eigenschaftsausdrucks-Editor die folgenden Informationen ein:
Fügen Sie unter ToLine den folgenden Ausdruck hinzu:
@[User::EmailAddress]
Fügen Sie für die MessageSource-Eigenschaft den folgenden Ausdruck hinzu:
"Dear " + @[User::FirstName] + ": The amount of your bonus for this year is $" + (DT_WSTR, 12) @[User::Bonus] + ". Thank you!"
Führen Sie das Paket aus.
Wenn Sie einen gültigen SMTP-Server und Ihre eigene E-Mail-Adresse angegeben haben, erhalten Sie für die Nachrichten, die vom Task "Mail senden" an die fiktiven Vertriebspersonen von AdventureWorks2012 gesendet wurden, Unzustellbarkeitsmeldungen.