Arbeiten mit Resultsets im Task „SQL ausführen“

In einem Integration Services-Paket ist es vom Typ des von dem Task verwendeten SQL-Befehls abhängig, ob an den Task „SQL ausführen“ ein Resultset zurückgegeben wird. Beispielsweise gibt eine SELECT-Anweisung in der Regel ein Resultset zurück, eine INSERT-Anweisung jedoch nicht.

Auch der Inhalt des Resultsets ist von dem SQL-Befehl abhängig. Das Resultset einer SELECT-Anweisung kann beispielsweise keine Zeilen, eine Zeile oder viele Zeilen enthalten. Das Resultset einer SELECT-Anweisung, die eine Anzahl oder eine Summe zurückgibt, enthält jedoch nur eine einzige Zeile.

Das Arbeiten mit Resultsets in einem Task „SQL ausführen“ bedeutet mehr, als nur zu wissen, ob ein SQL-Befehl ein Resultset zurückgibt und was dieses Resultset enthält. Es müssen weitere Benutzungsanforderungen und Richtlinien beachtet werden, um Resultsets erfolgreich in einem Task „SQL ausführen“ zu verwenden. Diese Benutzungsanforderungen und Richtlinien werden am Ende dieses Themas behandelt:

  • Angeben eines Resultsettyps

  • Auffüllen einer Variablen mit einem Resultset

  • Konfigurieren von Resultsets im Editor für den Task „SQL ausführen“.

Angeben eines Resultsettyps

Der Task SQL ausführen unterstützt die folgenden Resultsettypen:

  • Das Resultset Keine wird verwendet, wenn die Abfrage keine Ergebnisse zurückgibt. Beispielsweise wird dieses Resultset für Abfragen verwendet, die Datensätze in einer Tabelle hinzufügen, ändern und löschen.

  • Das Resultset Einzelne Zeile wird verwendet, wenn die Abfrage nur eine Zeile zurückgibt. Beispielsweise wird dieses Resultset für eine SELECT-Anweisung verwendet, die eine Anzahl oder eine Summe zurückgibt.

  • Das Resultset Vollständiges Resultset wird verwendet, wenn die Abfrage mehrere Zeilen zurückgibt. Beispielsweise wird dieses Resultset für eine SELECT-Anweisung verwendet, die alle Zeilen in einer Tabelle abruft.

  • Das Resultset XML wird verwendet, wenn die Abfrage ein Resultset in einem XML-Format zurückgibt. Beispielsweise wird dieses Resultset für eine SELECT-Anweisung verwendet, die eine FOR XML-Klausel einschließt.

Wenn der Task SQL ausführen das Resultset Vollständiges Resultset verwendet und die Abfrage mehrere Rowsets zurückgibt, gibt der Task nur das erste Rowset zurück. Generiert dieses Rowset einen Fehler, wird der Fehler vom Task gemeldet. Von anderen Rowsets generierte Fehler werden vom Task nicht gemeldet.

Je nach Typ des Verbindungs-Managers werden Werte, die von der SQL-Anweisung zurückgegeben werden und nicht bereits Zeichenfolgen sind, möglicherweise implizit oder explizit in Zeichenfolgen konvertiert. Ein ADO- oder ODBC-Verbindungs-Manager konvertiert Rückgabewerte implizit in Zeichenfolgen. Ein OLE DB-Verbindungs-Manager konvertiert Rückgabewerte der Datentypen DBTYPE_I8, DBTYPE_UI8, DBTYPE_NUMERIC, DBTYPE_GUID und DBTYPE_BYTES explizit in Zeichenfolgen. Ein ADO.NET-Verbindungs-Manager konvertiert Rückgabewerte jedoch nicht in Zeichenfolgen.

Auffüllen einer Variablen mit einem Resultset

Sie können das von einer Abfrage zurückgegebene Resultset an eine benutzerdefinierte Variable binden, falls der Resultsettyp eine einzelne Zeile, ein Rowset oder XML ist.

Ist der Resultsettyp Einzelne Zeile, können Sie eine Spalte im Rückgabeergebnis an eine Variable binden, indem Sie den Spaltennamen als Resultsetnamen verwenden. Sie können auch die Ordnungsposition der Spalte in der Spaltenliste als Resultsetnamen verwenden. Der Resultsetname für die Abfrage SELECT Color FROM Production.Product WHERE ProductID = ? könnte beispielsweise Color oder 0 sein. Gibt die Abfrage mehrere Spalten zurück, und Sie möchten auf die Werte in allen Spalten zugreifen, müssen Sie jede Spalte an eine andere Variable binden. Wenn Sie Spalten mithilfe von Zahlen als Resultsetnamen zu Variablen zuordnen, geben die Zahlen die Reihenfolge wieder, in der die Spalten in der Spaltenliste der Abfrage erscheinen. In der Abfrage SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ? verwenden Sie beispielsweise 0 für die Spalte Color und 1 für die Spalte ListPrice. Ob ein Spaltenname als Namen eines Resultsets verwendet werden kann, hängt davon ab, für welchen Anbieter der Task konfiguriert ist. Nicht alle Anbieter machen Spaltennamen verfügbar.

Bei einigen Abfragen, die einen einzelnen Wert zurückgeben, kann es sein, dass keine Spaltennamen enthalten sind. Beispielsweise gibt die SELECT COUNT (*) FROM Production.Product-Anweisung keinen Spaltennamen zurück. Sie können auf das Rückgabeergebnis zugreifen, indem Sie die Ordnungsposition 0 als Ergebnisnamen verwenden. Für den Zugriff auf das Rückgabeergebnis über den Spaltennamen muss in der Abfrage eine AS <alias name>-Klausel eingeschlossen sein, um einen Spaltennamen bereitzustellen. Die SELECT COUNT (*)AS CountOfProduct FROM Production.Product-Anweisung stellt die CountOfProduct-Spalte bereit. Sie können dann auf die Rückgabeergebnisspalte zugreifen, indem Sie den CountOfProduct-Spaltennamen bzw. die Ordnungsposition 0 verwenden.

Für den Resultsettyp Vollständiges Resultset oder XML müssen Sie 0 als Resultsetnamen verwenden.

Wenn Sie eine Variable einem Resultset mit dem Resultsettyp Einzelne Zeile zuordnen, muss die Variable einen Datentyp haben, der mit dem Datentyp der Spalte im Resultset kompatibel ist. So kann beispielsweise ein Resultset, das eine Spalte mit einem String-Datentyp enthält, keiner Variable mit einem numerischen Datentyp zugeordnet werden. Ein XML-Resultset kann nur einer Variable mit dem Datentyp String oder Object zugeordnet werden. Hat die Variable den String-Datentyp, gibt der Task SQL ausführen eine Zeichenfolge zurück, und die XML-Quelle kann die XML-Daten verwenden. Hat die Variable den Object-Datentyp, gibt der Task SQL ausführen ein DOM-Objekt (Document Object Model) zurück. Ein Resultset vom Typ Vollständiges Resultset muss einer Variablen vom Datentyp Object zugeordnet werden. Als Ergebnis wird ein Rowsetobjekt zurückgegeben. Sie können benutzerdefinierte Tasks erstellen, die im Rowsetobjekt navigieren und auf Informationen zu den Spalten und Daten im Rowset zugreifen.

In der folgenden Tabelle werden die Datentypen von Variablen zusammengefasst, die Resultsets zugeordnet werden können.

Typ des Resultsets

Datentyp der Variablen

Typ des Objekts

Einzelne Zeile

Jeder mit der Typspalte im Resultset kompatible Typ

Nicht anwendbar

Vollständiges Resultset

Object

Wenn der Task einen systemeigenen Verbindungs-Manager, wie z. B. einen ADO-, OLE DB-, Excel- oder ODBC-Verbindungs-Manager, verwendet, wird als Objekt ein ADO-Recordset zurückgegeben.

Wenn der Task einen verwalteten Verbindungs-Manager, wie z. B. den ADO.NET-Verbindungs-Manager, verwendet, wird als Objekt ein System.Data.DataSet zurückgegeben.

XML

String

String

XML

Object

Wenn der Task einen systemeigenen Verbindungs-Manager, wie z. B. einen ADO-, OLE DB-, Excel- oder ODBC-Verbindungs-Manager, verwendet, wird als Objekt ein MSXML6.IXMLDOMDocument zurückgegeben.

Wenn der Task einen verwalteten Verbindungs-Manager, wie z. B. den ADO.NET-Verbindungs-Manager, verwendet, wird als Objekt ein System.Xml.XmlDocument zurückgegeben.

Die Variable kann im Bereich des Tasks SQL ausführen oder des Pakets definiert werden. Falls die Variable einen Paketbereich aufweist, ist das Resultset für andere Tasks und Container innerhalb des Pakets verfügbar sowie für alle Pakete, die von den Tasks Paket ausführen oder DTS 2000-Paket ausführen ausgeführt werden.

Wenn Sie einem Single row-Resultset eine Variable zuordnen, könnten von der SQL-Anweisung zurückgegebene Werte, die noch keine Zeichenfolgen sind, in Zeichenfolgen konvertiert werden. Ob diese Konvertierung stattfindet oder ob diese Konvertierung implizit oder explizit ist, ist von dem verwendeten Verbindungs-Manager abhängig.

  • Mit einem ADO.NET-Verbindungs-Manager findet keine Konvertierung statt.

  • Mit einem ADO- oder ODBC-Verbindungs-Manager ist diese Konvertierung implizit.

  • Mit einem OLE DB- oder Excel-Verbindungs-Manager konvertiert der Verbindungs-Manager Werte der folgenden Typen explizit in Zeichenfolgen: DBTYPE_NUMERIC, DBTYPE_GUID und DBTYPE_BYTES.

Informationen zum Laden eines Resultsets in eine Variable finden Sie unter Vorgehensweise: Zuordnen von Resultsets zu Variablen in einem Task SQL ausführen.

Konfigurieren von Resultsets im Task „SQL ausführen“

Klicken Sie auf das folgende Thema, um weitere Informationen zu den Eigenschaften von Resultsets zu erhalten, die Sie im SSIS-Designer festlegen können:

Klicken Sie auf das folgende Thema, um weitere Informationen zum Festlegen dieser Eigenschaften im SSIS-Designer zu erhalten:

Externe Ressourcen

Integration Services (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf der Integration Services-Seite von MSDN oder TechNet:

Abonnieren Sie die auf der Seite verfügbaren RSS-Newsfeeds, um automatische Benachrichtigungen zu diesen Aktualisierungen zu erhalten.