Freigeben über


SQL ausführen (Task)

Aktualisiert: 15. September 2007

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

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.

Verbindungstyp Verbindungs-Manager

EXCEL

Excel-Verbindungs-Manager

OLE DB

OLE DB-Verbindungs-Manager

ODBC

ODBC-Verbindungs-Manager

ADO

ADO-Verbindungs-Manager

ADO.NET

ADO.NET-Verbindungs-Manager

SQLMOBILE

SQL Server Compact Edition-Verbindungs-Manager

Erstellen von SQL-Anweisungen

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.

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 das Dialogfeld Editor für den Task SQL ausführen zum Eingeben von SQL-Anweisungen oder den Abfrage-Generator verwenden. Dabei handelt es sich um eine grafische Benutzeroberfläche zum Erstellen von SQL-Abfragen.

ms141003.note(de-de,SQL.90).gifHinweis:
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 mehrerer Anweisungen in einem Batch

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 of Statements.

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 parametrisierter SQL-Befehle

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.

ms141003.note(de-de,SQL.90).gifHinweis:
Parameter können in einem Task SQL ausführen nur verwendet werden, wenn dies vom Datenprovider unterstützt wird.

Parameter in SQL-Befehlen, einschließlich Abfragen und gespeicherte Prozeduren, werden benutzerdefinierten Variablen zugeordnet, die im Bereich des Tasks SQL ausführen, eines übergeordneten Containers oder im Bereich des Pakets erstellt werden. Die Werte für Variablen können zur Entwurfszeit festgelegt oder zur Laufzeit dynamisch aufgefüllt werden. Sie können Parameter auch Systemvariablen zuordnen. Weitere Informationen finden Sie unter SQL Server Integration Services-Variablen und Systemvariablen.

Die Syntax des SQL-Befehls verwendet verschiedene Parametermarkierungen, je nach verwendetem Verbindungstyp im Task SQL ausführen. Beispielsweise erfordert der ADO.NET-Verbindungs-Managertyp, dass der SQL-Befehl eine Parametermarkierung im Format @varParameter verwendet, während der OLE DB-Verbindungstyp das Fragezeichen (?) als Parametermarkierung erfordert.

Die Namen, die in den Zuordnungen zwischen Variablen und Parametern als Parameternamen verwendet werden können, variieren ebenfalls je nach Managertyp. Beispielsweise verwendet der ADO.NET-Verbindungs-Managertyp einen benutzerdefinierten Namen mit einem @-Präfix, während der OLE DB-Verbindungs-Managertyp die Verwendung des numerischen Wertes einer 0-basierten Ordnungszahl als Parameternamen erfordert.

In der folgenden Tabelle finden Sie eine Auflistung der Anforderungen für SQL-Befehle für Verbindungs-Managertypen, die der Task SQL ausführen verwenden kann.

Verbindungstyp Parametermarkierung Parametername Beispiel SQL-Befehl

ADO

?

Param1, Param2, …

SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?

ADO.NET

@<parameter name>

@<parameter name>

SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = @parmContactID

ODBC

?

1, 2, 3, …

SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?

EXCEL und OLE DB

?

0, 1, 2, 3, …

SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?

Parameter mit ADO.NET-Verbindungs-Managern

ADO.NET-Verbindungs-Manager erfordern die Verwendung von Parameternamen als Parametermarkierungen in SQL-Befehlen. Das bedeutet, dass Variablen Parametern direkt zugeordnet werden können. Beispielsweise wird die @varName-Variable dem Parameter mit der Bezeichnung @parName zugeordnet. Auf diese Weise wird dem @parName-Parameter ein Wert bereitgestellt.

Parameter mit EXCEL-, ODBC- und OLE DB-Verbindungs-Managern

EXCEL-, ODBC- und OLE DB-Verbindungs-Manager erfordern die Verwendung von Fragezeichen (?) als Parametermarkierungen in SQL-Befehlen sowie die Verwendung 0-basierter bzw. 1-basierter numerischer Werte als Parameternamen. Wenn der Task SQL ausführen den ODBC-Verbindungs-Manager verwendet, weist der Parametername, der dem ersten Parameter der Abfrage zugeordnet wird, die Bezeichnung 1 auf. Andernfalls weist der Parameter die Bezeichnung 0 auf. Bei allen nachfolgenden Parametern zeigt der numerische Wert des Parameternamens den Parameter im SQL-Befehl an, dem der Parametername zugeordnet ist. Beispielsweise wird der Parametername mit der Bezeichnung 3 dem dritten Parameter zugeordnet, der im SQL-Befehl durch das dritte Fragezeichen (?) dargestellt wird.

Um Werte für Parameter bereitzustellen, werden den Parameternamen Variablen zugeordnet. Der Task SQL ausführen verwendet dann den Ordinalwert des Parameternamens, um die Variablenwerte in Parametern zu laden.

Wenn der Task Ausführen den OLE DB-Verbindungstyp verwendet, ist die BypassPrepare-Eigenschaft des Tasks verfügbar. Wenn der Task SQL ausführen SQL-Ausdrücke mit benannten Parametern verwendet, sollten Sie diese Eigenschaft auf true festlegen.

Wenn Sie einen OLE DB-Verbindungs-Manager verwenden, können Sie keine parametrisierten Unterabfragen verwenden, weil der Task SQL ausführen Parameterinformationen nicht über den OLE DB-Anbieter ableiten kann. Sie können jedoch einen Ausdruck verwenden, um die Parameterwerte zu einer Abfragezeichenfolge zu verketten und die SqlStatementSource-Eigenschaft des Tasks festzulegen.

Einige OLE DB-Datentypen werden, abhängig vom Anbieter, den der Verbindungs-Manager verwendet, nicht unterstützt. Beispielsweise erkennt der Excel-Treiber nur einen begrenzten Satz von Datentypen. Weitere Informationen zum Verhalten des Jet-Anbieters mit dem Excel-Treiber finden Sie unter Excel-Quelle.

Parameter mit ADO-Verbindungs-Managern

ADO-Verbindungs-Manager erfordern die Verwendung von Fragezeichen (?) als Parametermarkierungen in SQL-Befehlen. Als Parameternamen können jedoch beliebige benutzerdefinierte Namen verwendet werden, mit Ausnahme von ganzzahligen Werten.

Um Werte für Parameter bereitzustellen, werden den Parameternamen Variablen zugeordnet. Der Task SQL ausführen verwendet dann den Ordinalwert des Parameternamens aus der Parameterliste, um die Variablenwerte in Parametern zu laden.

Verwenden von Parametern mit WHERE-Klauseln

In SELECT-, INSERT-, UPDATE- und DELETE-Befehlen sind häufig WHERE-Klauseln enthalten, um Filter anzugeben, die die Bedingungen definieren, die die Zeilen in den Quelltabellen für einen SQL-Befehl erfüllen müssen. Parameter stellen die Filterwerte in den WHERE-Klauseln bereit.

Sie können Parametermarkierungen verwenden, um Parameterwerte dynamisch bereitzustellen. Die Regeln für die in der SQL-Anweisung zu verwendenden Parametermarkierungen und Parameternamen hängen vom Typ des Verbindungs-Managers ab, den der Task SQL ausführen verwendet.

In der folgenden Tabelle finden Sie eine Auflistung von Beispielen des SELECT-Befehls nach verschiedenen Verbindungs-Managertypen. Die INSERT-, UPDATE- und DELETE-Anweisungen ähneln sich. In den Beispielen wird die SELECT-Anweisung verwendet, um Produkte aus der Product-Tabelle der AdventureWorks-Datenbank zurückzugeben, die einen ProductID-Wert aufweisen, der größer oder kleiner ist als die angegebenen Werte von zwei Parametern.

Verbindungstyp SELECT-Syntax

EXCEL, ODBC und OLEDB

SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?

ADO

SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?

ADO.NET

SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID AND ProductID < @parmMaxProductID

In den Beispielen werden Parameter mit den folgenden Namen benötigt:

  • Die EXCEL- und OLED DB-Verbindungs-Manager verwenden die Parameternamen 0 und 1. Der ODBC-Verbindungstyp verwendet die Namen 1 und 2.
  • Der ADO-Verbindungstyp kann zwei beliebige Parameternamen verwenden, wie z. B. Param1 und Param2, deren Zuordnung muss aber nach ihrer Ordnungsposition in der Parameterliste erfolgen.
  • Der ADO.NET-Verbindungstyp verwendet die Parameternamen @parmMinProductID und @parmMaxProductID.

Verwenden von Parametern mit gespeicherten Prozeduren

Für SQL-Befehle, die gespeicherte Prozeduren ausführen, kann die Parameterzuordnung ebenfalls verwendet werden. Die Regeln für die zu verwendenden Parametermarkierungen und Parameternamen hängen, wie die Regeln für parametrisierte Abfragen, vom Typ des Verbindungs-Managers ab, den der Task SQL ausführen verwendet.

In der folgenden Tabelle finden Sie eine Auflistung von Beispielen des EXEC-Befehls nach verschiedenen Verbindungs-Managertypen. Die Beispiele führen die gespeicherte Prozedur uspGetBillOfMaterials der AdventureWorks-Datenbank aus. Die gespeicherte Prozedur verwendet die @StartProductID- und @CheckDate-Eingabeparameter.

Verbindungstyp EXEC-Syntax

EXCEL und OLEDB

EXEC uspGetBillOfMaterials ?, ?

ODBC

{call uspGetBillOfMaterials(?, ?)}

Weitere Informationen über die ODBC-Aufrufsyntax finden Sie im Thema Procedure Parameters in der ODBC Programmer's Reference der MSDN Library (auf Englisch).

ADO

Wenn IsQueryStoredProcedure auf False festgelegt ist, EXEC uspGetBillOfMaterials ?, ?

Wenn IsQueryStoredProcedure auf True festgelegt ist, uspGetBillOfMaterials

ADO.NET

Wenn IsQueryStoredProcedure auf False festgelegt ist, EXEC uspGetBillOfMaterials @StartProductID, @CheckDate

Wenn IsQueryStoredProcedure auf True festgelegt ist, uspGetBillOfMaterials

Um Ausgabeparameter verwenden zu können, erfordert die Syntax die Verwendung des OUTPUT-Schlüsselwortes am Ende jeder Parametermarkierung. Beispiel: EXEC myStoredProcedure ? OUTPUT.

Weitere Informationen zum Verwenden von Eingabe- und Ausgabeparametern mit gespeicherten Prozeduren von Transact-SQL finden Sie unter Parameter (Datenbankmodul), Zurückgeben von Daten mithilfe von OUTPUT-Parametern und EXECUTE (Transact-SQL).

Abrufen von Werten von Rückgabecodes

Eine gespeicherte Prozedur kann einen ganzzahligen Wert, der als Rückgabecode bezeichnet wird, zurückgeben, um den Ausführungsstatus einer Prozedur anzuzeigen. Verwenden Sie Parameter des ReturnValue-Typs, um Rückgabecodes im Task SQL ausführen zu implementieren.

In der folgenden Tabelle finden Sie eine Auflistung einiger Beispiele des EXEC-Befehls nach verschiedenen Verbindungstypen, die Rückgabecodes implementieren. Alle Beispiele verwenden einen Eingabeparameter. Die Regeln für die mit ReturnValue-Parametern zu verwendenden Parametermarkierungen und Parameternamen sind mit den für Input- und Output-Parametertypen geltenden Regeln identisch.

Ein Teil der Syntax unterstützt keine Parameterliterale. In diesem Fall müssen Sie die Parameterwerte mithilfe einer Variablen bereitstellen.

Verbindungstyp EXEC-Syntax

EXCEL und OLEDB

EXEC ? = myStoredProcedure 1

ODBC

{? = call myStoredProcedure(1)}

Weitere Informationen über die ODBC-Aufrufsyntax finden Sie im Thema Procedure Parameters in der ODBC Programmer's Reference der MSDN Library (auf Englisch).

ADO

Wenn IsQueryStoreProcedure auf False festgelegt ist, EXEC ? = myStoredProcedure 1

Wenn IsQueryStoreProcedure auf True festgelegt ist, myStoredProcedure

ADO.NET

Wenn IsQueryStoreProcedure auf True festgelegt ist.

myStoredProcedure

Weitere Informationen zum Verwenden von Rückgabecodes mit gespeicherten Prozeduren von Transact-SQL finden Sie unter Zurückgeben von Daten mithilfe eines Rückgabecodes und RETURN (Transact-SQL).

Angeben eines Resultsettyps

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.

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 gespeicherte Prozedur verwendet, die einen Rückgabecode oder eine SELECT-Anweisung zurückgibt, 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.

Der Task SQL ausführen konvertiert die von der SQL-Anweisung zurückgegebenen Werte, die noch keine string-Werte sind, in string-Werte. Beispielsweise werden Werte vom SQL Server-Datentyp uniqueidentifier, bigint, decimal oder numeric in string-Werte konvertiert.

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 Resultsetnamen 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. einen 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. einen 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 einer Variablen einen Einzelne Zeile-Resultset zuordnen, könnten Werte, die von der SQL-Anweisung zurückgegeben werden und noch keine Zeichenfolgen sind, in Zeichenfolgen konvertiert werden. Ob diese Konvertierung stattfindet oder ob diese Konvertierung implizit oder explizit ist, hängt vom Typ des verwendeten Verbindungs-Managers ab:

  • Bei einem ADO.NET-Verbindungs-Manager findet keine Konvertierung statt.
  • Bei einem ADO- oder ODBC-Verbindungs-Manager findet diese Konvertierung implizit statt.
  • Bei einem OLE DB- oder Excel-Verbindungs-Manager konvertiert der Verbindungs-Manager Werte des Typs DBTYPE_I8, DBTYPE_UI8, DBTYPE_NUMERIC, DBTYPE_GUID und DBTYPE_BYTES explizit in Zeichenfolgen.

Informationen zum Laden eines Resultsets in eine Variable finden Sie unter Vorgehensweise: Zuordnen von Resultsets zu Variablen in einem 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 Description

ExecuteSQLExecutingQuery

Enthält Informationen zu den Ausführungsphasen der SQL-Anweisung. Protokolleinträge werden geschrieben, wenn der Task eine Verbindung mit der Datenbank anfordert, beim Beginn der Vorbereitung der SQL-Anweisung sowie nach Abschluss der Ausführung der SQL-Anweisung. Der Protokolleintrag für die Vorbereitungsphase schließt die vom Task verwendete SQL-Anweisung ein.

Problembehandlung des Tasks SQL ausführen

Seit Microsoft SQL Server 2005 Service Pack 2 (SP2) können Sie die vom Task SQL ausführen an externe Datenprovider gerichteten Aufrufe protokollieren. Mithilfe dieser neuen 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 einen externen Datenprovider gerichteten Aufrufe die Paketprotokollierung, und wählen Sie das Diagnostic-Ereignis auf Paketebene aus. Weitere Informationen finden Sie unter Paketausführung (Problembehandlung).

Manchmal gibt ein SQL-Befehl oder eine gespeicherte Prozedur mehrere Resultsets zurück. Diese Resultsets enthalten nicht nur Rowsets, die ein Ergebnis von SELECT-Abfragen sind, sondern auch einzelne Werte, die das Ergebnis der RAISERROR-Anweisung oder der PRINT-Anweisung sind. Mit Ausnahme des ODBC-Verbindungs-Managers ignorieren alle Verbindungs-Manager die Resultsets, die nach dem ersten Resultset auftreten. Daher ignorieren diese Verbindungs-Manager einen Fehler, der von einem SQL-Befehl oder einer gespeicherten Prozedur zurückgegeben wurde, wenn der Fehler nicht Teil des ersten Resultsets ist.

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:

Siehe auch

Aufgaben

Vorgehensweise: Zuordnen von Abfrageparametern zu Variablen in einem Task SQL ausführen

Konzepte

Foreach-Schleifencontainer
For-Schleifencontainer
Integration Services-Tasks
Erstellen einer Paketablaufsteuerung

Andere Ressourcen

Vorbereiten von SQL-Anweisungen

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

15. September 2007

Geänderter Inhalt:
  • Fehler in der ODBC-Parametersyntax wurden beseitigt.
  • Es wurde erklärt, wie die Zuordnung einer Variablen zu einem Einzelne Zeile-Resultset dazu führen kann, dass manche Rückgabewerte in Zeichenfolgen konvertiert werden.
  • Es wurden Problembehandlungsinformationen über Fehler hinzugefügt, die in mehreren Resultsets auftreten.

12. Dezember 2006

Neuer Inhalt:
  • Es wurden Informationen hinzugefügt, dass SQL Server 2005 SP2 neue Meldungen für die Protokollierung enthält, mit denen Benutzer Probleme bei Aufrufen behandeln können, die vom Task an externe Datenprovider gerichtet werden.

17. Juli 2006

Geänderter Inhalt:
  • Eine Tabelle mit benutzerdefinierten Protokolleinträgen wurde hinzugefügt.
  • Der Tabelle wurde eine Spalte mit den Objekttypen hinzugefügt, die von einem Resultset zurückgegeben werden können.
  • XML-Zeichenfolgen- und Objekt-Ergebnistypen wurden getrennt.

14. April 2006

Geänderter Inhalt:
  • Eine Tabelle, in der mögliche Zuordnungen zwischen Variablen und Resultsets aufgelistet sind, wurde hinzugefügt.
  • Informationen zur BypassPrepare-Eigenschaft wurden hinzugefügt.

05. Dezember 2005

Geänderter Inhalt:
  • Informationen über das Ausführen parametrisierter SQL-Anweisungen wurden hinzugefügt.