根据检索到的数据查询多个数据库
在SSIS中,经常需要从一个数据库检索数据并使用该数据进行查询另一个数据库。这可以通过多种方法来实现:
方法 1:查找转换
查找转换允许您从第二个数据库检索数据并将其添加到数据流中。但是,它本质上不会根据检索到的数据过滤行。
要使用查找转换过滤行,请在查找过程中处理错误。您可以将错误处理设置为忽略行,并使用条件拆分来删除添加列中具有空值的行。或者,您可以将错误处理设置为重定向行,将所有行路由到错误输出行,然后可以对其进行过滤。
方法 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”变量分配为
方法三:执行 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
这会生成一个 SQL 查询,其中在 IN 子句中包含检索到的 ID。将输出分配给 User::MyVariableList 变量,并将其用作 OLEDB 源,以便从第二个数据库检索数据。
以上是如何根据检索到的数据在SSIS中查询多个数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!