Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
Spezifizierung eines Resultset-Typs
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.
Auffüllen einer Variablen mit einer Ergebnismenge
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 Resultsetnamen für die Abfrage SELECT Color FROM Production.Product WHERE ProductID = ? könnte beispielsweise Color oder 0sein. 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 <Aliasname>-Klausel enthalten sein, damit ein Spaltenname bereitgestellt werden kann. 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 XMLmü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. Beispielsweise kann ein Resultset, das eine Spalte mit einem String Datentyp enthält, einer Variablen mit einem numerischen Datentyp nicht zugeordnet werden. Wenn Sie die TypeConversionMode-EigenschaftAllowedauf "TypeConversionMode" festlegen, versucht die Execute SQL-Aufgabe, ausgabeparameter und Abfrageergebnisse in den Datentyp der Variablen zu konvertieren, der die Ergebnisse zugewiesen sind.
Ein XML-Resultset kann nur einer Variablen mit dem String- oder Object-Datentyp zugeordnet werden. Wenn die Variable den String Datentyp aufweist, gibt die Execute SQL-Aufgabe eine Zeichenfolge zurück, und die XML-Quelle kann die XML-Daten verwenden. Wenn die Variable den Object Datentyp aufweist, gibt die Execute SQL-Aufgabe ein Dom-Objekt (Document Object Model) zurück.
Ein vollständiges Resultset muss einer Variablen des Object Datentyps zugeordnet werden. Als Ergebnis wird ein Rowsetobjekt zurückgegeben. Sie können einen Foreach-Schleifen-Container verwenden, um die Tabellenzeilenwerte, die in der Objektvariable gespeichert sind, in Paketvariablen zu extrahieren. Verwenden Sie dann ein Skripttask, um die Daten, die in Paketvariablen gespeichert sind, in eine Datei zu schreiben. Eine Demonstration dazu mithilfe eines Foreach Loop-Containers und einer Skriptaufgabe finden Sie im CodePlex-Beispiel, ausführen von SQL-Parametern und Resultsets in msftisprodsamples.codeplex.com.
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 die Aufgabe einen systemeigenen Verbindungs-Manager verwendet, einschließlich der ADO-, OLE DB-, Excel- und ODBC-Verbindungsmanager, ist das zurückgegebene Objekt ein ADO Recordset.Wenn die Aufgabe einen verwalteten Verbindungs-Manager verwendet, z. B. den ADO.NET Verbindungs-Manager, ist das zurückgegebene Objekt ein System.Data.DataSet.Sie können eine Skriptaufgabe verwenden, um auf das System.Data.DataSet Objekt zuzugreifen, wie im folgenden Beispiel gezeigt.Dim dt As Data.DataTable Dim ds As Data.DataSet = CType(Dts.Variables("Recordset").Value, DataSet) dt = ds.Tables(0) |
| XML | String |
String |
| XML | Object |
Wenn die Aufgabe einen systemeigenen Verbindungs-Manager verwendet, einschließlich der ADO-, OLE DB-, Excel- und ODBC-Verbindungsmanager, ist das zurückgegebene Objekt ein MSXML6.IXMLDOMDocument.Wenn die Aufgabe einen verwalteten Verbindungs-Manager verwendet, z. B. den ADO.NET Verbindungs-Manager, ist das zurückgegebene Objekt ein System.Xml.XmlDocument. |
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. Dazu müssen die folgenden Bedingungen erfüllt sein:
Die Eigenschaft TypeConversionMode ist auf "True" festgelegt. Sie haben den Eigenschaftswert im Eigenschaftenfenster oder mit dem Editor für den Task "SQL ausführen" festgelegt.
Die Konvertierung führt nicht zu einem Abschneiden von Daten.
Informationen zum Laden eines Resultsets in eine Variable finden Sie unter Zuordnen von Resultsets zu Variablen in einer Execute SQL-Aufgabe.
Ergebnismengen in der Aufgabe "SQL ausführen" konfigurieren
Weitere Informationen zu den Eigenschaften von Resultsets, die Sie im SSIS-Designer festlegen können, finden Sie im folgenden Thema, klicken Sie darauf:
Klicken Sie auf das folgende Thema, um weitere Informationen zum Festlegen dieser Eigenschaften im SSIS -Designer zu erhalten:
Verwandte Aufgaben
Zuordnen von Resultsets zu Variablen in einer SQL-Ausführungsaufgabe
Verwandte Inhalte
- CodePlex-Beispiel, Ausführen von SQL-Parametern und Resultat-Sätzen auf msftisprodsamples.codeplex.com