SQL ausführen (SSIS-Task)

Der Task SQL ausführen führt SQL-Anweisungen oder gespeicherte Prozeduren aus einem Paket aus. Dieser Task kann eine oder mehrere SQL-Anweisungen enthalten, die sequenziell ausgeführt werden. Der Task SQL ausführen kann für folgende Zwecke verwendet werden:

  • Abschneiden einer Tabelle oder Sicht, um das Einfügen von Daten vorzubereiten.

  • Erstellen, Ändern und Löschen von Datenbankobjekten, wie z. B. Tabellen und Sichten.

  • Neuerstellen von Fakten- und Dimensionstabellen vor dem Laden von Daten.

  • Ausführen gespeicherter Prozeduren.

  • Speichern des Rowsets, das von einer Abfrage zurückgegeben wird, in einer Variablen.

Es gibt folgende Möglichkeiten, um den Task SQL ausführen zu konfigurieren:

  • Geben Sie den Verbindungs-Manager an, der zum Verbinden mit einer Datenbank verwendet werden soll.

  • Geben Sie den Resultsettyp an, der von der SQL-Anweisung zurückgegeben wird.

  • Geben Sie ein Timeout für die SQL-Anweisungen an.

  • Geben Sie die Quelle der SQL-Anweisung an.

  • Geben Sie an, ob der Task die Vorbereitungsphase für die SQL-Anweisung auslässt.

  • Wenn Sie den ADO-Verbindungstyp verwenden, müssen Sie angeben, ob es sich bei der SQL-Anweisung um eine gespeicherte Prozedur handelt. Für andere Verbindungstypen ist diese Eigenschaft schreibgeschützt und weist immer den Wert false auf.

Der Task SQL ausführen kann in Kombination mit dem Foreach-Schleifencontainer und dem For-Schleifencontainer verwendet werden, um mehrere SQL-Anweisungen auszuführen. Diese Container implementieren das Wiederholen von Ablaufsteuerungen in einem Paket und können den Task SQL ausführen wiederholt ausführen. Beispielsweise kann ein Paket mithilfe des Foreach-Schleifencontainers Dateien in einem Ordner aufzählen und einen Task SQL ausführen wiederholt ausführen, um die in jeder Datei gespeicherte SQL-Anweisung auszuführen.

Herstellen einer Verbindung mit einer Datenquelle über den Task "SQL ausführen"

Der Task SQL ausführen kann verschiedene Arten von Verbindungs-Managern für die Verbindung mit der Datenquelle verwenden, in der die SQL-Anweisung oder die gespeicherte Prozedur ausgeführt wird. Der Task kann die in der folgenden Tabelle aufgeführten Verbindungstypen verwenden.

Erstellen von SQL-Anweisungen, die vom Task "SQL ausführen" verwendet werden

Die Quelle für die SQL-Anweisungen, die von diesem Task verwendet werden, kann eine Taskeigenschaft mit einer Anweisung sein, eine Verbindung mit einer Datei mit mindestens einer Anweisung oder der Name einer Variablen, die eine Anweisung enthält. Die SQL-Anweisungen müssen in dem Dialekt des Quelldatenbank-Managementsystems (DBMS, Database Management System) erstellt werden. Weitere Informationen finden Sie unter Verwenden von Abfragen in Paketen.

Wenn die SQL-Anweisungen in einer Datei gespeichert sind, stellt der Task mithilfe eines Verbindungs-Managers eine Verbindung mit der Datei her. Weitere Informationen finden Sie unter Dateiverbindungs-Manager.

Im SSIS-Designer können Sie zum Eingeben von SQL-Anweisungen das Dialogfeld Editor für den Task SQL ausführen oder den Abfrage-Generator verwenden. Dabei handelt es sich um eine grafische Benutzeroberfläche zum Erstellen von SQL-Abfragen. Weitere Informationen finden Sie unter Editor für den Task 'SQL ausführen' (Seite Allgemein) und Abfrage-Generator.

HinweisHinweis

Gültige SQL-Anweisungen, die außerhalb des Tasks SQL ausführen erstellt wurden, werden vom Task SQL ausführen möglicherweise nicht erfolgreich analysiert.

Senden von mehreren Anweisungen in einem Batch mithilfe des Tasks "SQL ausführen"

Wenn Sie für einen Task SQL ausführen mehrere Anweisungen einschließen, können Sie diese gruppieren und als Batch ausführen. Verwenden Sie den GO-Befehl, um das Ende eines Batches zu signalisieren. Alle SQL-Anweisungen zwischen zwei GO-Befehlen werden als Batch an den OLE DB-Anbieter zum Ausführen gesendet. Der SQL-Befehl kann mehrere durch GO-Befehle getrennte Batches einschließen.

Bezüglich der SQL-Anweisungen, die als Batch gruppiert werden können, sind Einschränkungen vorhanden. Weitere Informationen finden Sie unter Batches von Anweisungen.

Falls der Task SQL ausführen einen Batch mit SQL-Anweisungen ausführt, gelten für den Batch die folgenden Regeln:

  • Nur eine Anweisung kann ein Resultset zurückgeben. Sie muss außerdem die erste Anweisung im Batch sein.

  • Falls das Resultset Ergebnisbindungen verwendet, müssen die Abfragen die gleiche Anzahl von Spalten zurückgeben. Falls die Abfragen eine andere Anzahl von Spalten zurückgeben, wird für den Task ein Fehler gemeldet. Bei einem Fehler des Tasks werden jedoch die von dem Task ausgeführten Abfragen, wie z. B. DELETE- oder INSERT-Abfragen, möglicherweise erfolgreich ausgeführt.

  • Falls für die Ergebnisbindungen Spaltennamen verwendet werden, muss die Abfrage Spalten zurückgeben, die die gleichen Namen wie die vom Task verwendeten Resultsetnamen besitzen. Wenn die Spalten fehlen, wird für den Task ein Fehler gemeldet.

  • Falls für den Task die Parameterbindung verwendet wird, müssen alle Abfragen im Batch die gleiche Anzahl und Art von Parametern aufweisen.

Ausführen von parametrisierten SQL-Befehlen mithilfe des Tasks "SQL ausführen"

SQL-Anweisungen und gespeicherte Prozeduren verwenden häufig Eingabeparameter, Ausgabeparameter und Rückgabecodes. Der Task SQL ausführen unterstützt die Input-, Output- und ReturnValue-Parametertypen. Sie können den Input-Typ für Eingabeparameter, den Output-Typ für Ausgabeparameter und den ReturnValue-Typ für Rückgabecodes verwenden.

HinweisHinweis

Parameter können in einem Task SQL ausführen nur verwendet werden, wenn dies vom Datenanbieter unterstützt wird.

Informationen über die Verwendung von Parametern und Rückgabecodes im Task SQL ausführen finden Sie unter Arbeiten mit Parametern und Rückgabecodes im Task „SQL ausführen“.

Angeben eines Resultsettyps für den Task "SQL ausführen"

Der Typ des SQL-Befehls bestimmt, ob für 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. Das Resultset einer SELECT-Anweisung kann keine Zeilen, eine Zeile oder viele Zeilen enthalten. Gespeicherte Prozeduren können außerdem einen ganzzahligen Wert, der als Rückgabecode bezeichnet wird, zurückgeben, um den Ausführungsstatus der Prozedur anzuzeigen. In diesem Fall besteht das Resultset aus einer einzelnen Zeile.

Informationen über das Abrufen von Resultsets aus SQL-Befehlen im Task SQL ausführen finden Sie unter Arbeiten mit Resultsets im Task „SQL ausführen“.

Verfügbare benutzerdefinierte Protokolleinträge für den Task 'SQL ausführen'

In der folgenden Tabelle werden die benutzerdefinierten Protokolleinträge für den Task 'SQL ausführen' beschrieben. Weitere Informationen finden Sie unter Implementieren der Protokollierung in Pakete und Benutzerdefinierte Meldungen für die Protokollierung.

Protokolleintrag

Beschreibung

ExecuteSQLExecutingQuery

Enthält Informationen zu den Ausführungsphasen der SQL-Anweisung. Protokolleinträge werden geschrieben, wenn der Task eine Verbindung mit der Datenbank erhält, wenn der Task beginnt, die SQL-Anweisung vorzubereiten, und nachdem die Ausführung der SQL-Anweisung abgeschlossen wurde. Der Protokolleintrag für die Vorbereitungsphase schließt die vom Task verwendete SQL-Anweisung ein.

Problembehandlung des Tasks SQL ausführen

Sie können die vom Task SQL ausführen an externe Datenanbieter gerichteten Aufrufe protokollieren. Mithilfe dieser Protokollierungsfunktionen können Sie Probleme bei SQL-Befehlen behandeln, die vom Task SQL ausführen ausgeführt werden. Aktivieren Sie zum Protokollieren der vom Task SQL ausführen an externe Datenanbieter gerichteten Aufrufe die Paketprotokollierung, und wählen Sie das Diagnostic-Ereignis auf Paketebene aus. Weitere Informationen finden Sie unter Paketausführung (Problembehandlung).

Gelegentlich gibt ein SQL-Befehl oder eine gespeicherte Prozedur mehrere Resultsets zurück. Zu diesen Resultsets gehören nicht nur Rowsets, die das Ergebnis von SELECT-Abfragen sind, sondern auch einzelne Werte als Ergebnis von Fehlern in der RAISERROR-Anweisung oder PRINT-Anweisung. Ob der Task Fehler in Resultsets nach dem ersten Resultset ignoriert, hängt vom verwendeten Typ des Verbindungs-Managers ab:

  • Wenn Sie OLE DB- und ADO-Verbindungs-Manager verwenden, ignoriert der Task die Resultsets, die nach dem ersten Resultset auftreten. Das bedeutet, dass der Task bei diesen Verbindungs-Managern einen von einem SQL-Befehl oder einer gespeicherten Prozedur zurückgegebenen Fehler ignoriert, wenn der Fehler nicht Teil des ersten Resultsets ist.

  • Wenn Sie ODBC- und ADO.NET-Verbindungs-Manager verwenden, werden die Resultsets, die nach dem ersten Resultset auftreten, vom Task nicht ignoriert. Bei diesen Verbindungs-Managern erzeugt der Task einen Fehler, wenn ein anderes Resultset als das erste Resultset einen Fehler aufweist.

Konfigurieren des Tasks SQL ausführen

Eigenschaften können Sie programmgesteuert oder mit dem SSIS-Designer festlegen.

Klicken Sie auf eines der folgenden Themen, um weitere Informationen zu den Eigenschaften 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:

Programmgesteuertes Konfigurieren des Tasks SQL ausführen

Klicken Sie auf das folgende Thema, um weitere Informationen zum programmgesteuerten Festlegen dieser Eigenschaften zu erhalten:

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 MSDN auf der Integration Services-Seite:


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