Abfragen mehrerer Datenbanken basierend auf abgerufenen Daten
In SSIS ist es häufig erforderlich, Daten aus einer Datenbank abzurufen und diese Daten zur Abfrage zu verwenden eine andere Datenbank. Dies kann durch mehrere Methoden erreicht werden:
Methode 1: Lookup-Transformation
Mit der Lookup-Transformation können Sie Daten aus einer zweiten Datenbank abrufen und dem Datenstrom hinzufügen . Allerdings werden Zeilen nicht grundsätzlich auf Grundlage der abgerufenen Daten gefiltert.
Um Zeilen mithilfe der Lookup-Transformation zu filtern, behandeln Sie Fehler während des Lookup-Vorgangs. Sie können die Fehlerbehandlung auf „Zeile ignorieren“ einstellen und eine bedingte Aufteilung verwenden, um Zeilen mit Nullwerten in den hinzugefügten Spalten zu entfernen. Alternativ können Sie die Fehlerbehandlung auf „Zeile umleiten“ einstellen, um alle Zeilen an die Fehlerausgabezeile weiterzuleiten, die dann gefiltert werden kann.
Methode 2: Skriptaufgabe
Für Für einen selektiveren Datenabruf sollten Sie die Verwendung einer Skriptaufgabe in Betracht ziehen:
' Get the list of IDs from the first database Dim lst As New Collections.Generic.List(Of String) Dim myADONETConnection As SqlClient.SqlConnection = _ DirectCast(Dts.Connections("TestAdo").AcquireConnection(Dts.Transaction), _ SqlClient.SqlConnection) myADONETConnection.Open() Dim myADONETCommand As New SqlClient.SqlCommand("Select [ID] FROM dbo.MyTable", myADONETConnection) Dim dr As SqlClient.SqlDataReader dr = myADONETCommand.ExecuteReader While dr.Read lst.Add(dr(0).ToString) End While ' Construct the query for the second database Dts.Variables.Item("User::MyVariableList").Value = "SELECT ... FROM ... WHERE ID IN(" & String.Join(",", lst) & ")"
Weisen Sie „User::MyVariableList“ zu. Variable als Quelle für den nachfolgenden Datenabruf.
Methode 3: SQL-Task ausführen
Ein anderer Ansatz ist der SQL-Task ausführen:
DECLARE @str AS VARCHAR(4000) SET @str = '' SELECT @str = @str + CAST([ID] AS VARCHAR(255)) + ',' FROM dbo.MyTable SET @str = 'SELECT * FROM MySecondDB WHERE ID IN (' + SUBSTRING(@str,1,LEN(@str) - 1) + ')' SELECT @str
Dadurch wird eine SQL-Abfrage generiert, die die abgerufenen IDs in einer IN-Klausel enthält. Weisen Sie die Ausgabe der Variable User::MyVariableList zu und verwenden Sie sie als OLEDB-Quelle für den Datenabruf aus der zweiten Datenbank.
Das obige ist der detaillierte Inhalt vonWie frage ich mehrere Datenbanken in SSIS basierend auf abgerufenen Daten ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!