ホームページ >データベース >mysql チュートリアル >取得したデータに基づいて SSIS で複数のデータベースをクエリする方法は?
取得したデータに基づく複数のデータベースのクエリ
SSIS では、多くの場合、1 つのデータベースからデータを取得し、そのデータを使用してクエリを実行する必要があります。別のデータベース。これは、いくつかの方法で実現できます。
方法 1: ルックアップ変換
ルックアップ変換を使用すると、2 番目のデータベースからデータを取得し、データ ストリームに追加できます。 。ただし、本質的には取得したデータに基づいて行をフィルター処理するわけではありません。
ルックアップ変換を使用して行をフィルターするには、ルックアップ プロセス中にエラーを処理します。エラー処理を行を無視するように設定し、条件分割を使用して、追加された列内の NULL 値を含む行を削除できます。あるいは、エラー処理を行のリダイレクトに設定して、すべての行をエラー出力行にルーティングし、フィルター処理することもできます。
方法 2: スクリプト タスク
の場合より選択的なデータ取得の場合は、スクリプト タスクの使用を検討してください:
' 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) & ")"
"User::MyVariableList" 変数を後続のデータ取得のソースとして使用します。
方法 3: SQL タスクを実行
別のアプローチは、SQL タスクを実行することです:
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
これにより、取得された ID を IN 句に含む SQL クエリが生成されます。出力を User::MyVariableList 変数に割り当て、2 番目のデータベースからデータを取得するための OLEDB ソースとして使用します。
以上が取得したデータに基づいて SSIS で複数のデータベースをクエリする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。