Menyoal Berbilang Pangkalan Data Berdasarkan Data Diperoleh
Dalam SSIS, selalunya perlu untuk mendapatkan semula data daripada satu pangkalan data dan menggunakan data tersebut untuk membuat pertanyaan pangkalan data lain. Ini boleh dicapai melalui beberapa kaedah:
Kaedah 1: Transformasi Carian
Transformasi Carian membolehkan anda mendapatkan semula data daripada pangkalan data kedua dan menambahkannya pada aliran data . Walau bagaimanapun, ia tidak secara semula jadi menapis baris berdasarkan data yang diambil.
Untuk menapis baris menggunakan Transformasi Carian, kendalikan ralat semasa proses carian. Anda boleh menetapkan Pengendalian Ralat kepada Abaikan Baris dan gunakan Pemisahan Bersyarat untuk mengalih keluar baris dengan nilai nol dalam lajur yang ditambahkan. Sebagai alternatif, anda boleh menetapkan Pengendalian Ralat kepada Ubah Hala Baris untuk menghalakan semua baris ke baris keluaran ralat, yang kemudiannya boleh ditapis.
Kaedah 2: Tugasan Skrip
Untuk pengambilan data yang lebih selektif, pertimbangkan untuk menggunakan Tugasan Skrip:
' 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) & ")"
Tetapkan Pembolehubah "User::MyVariableList" sebagai sumber untuk mendapatkan semula data seterusnya.
Kaedah 3: Laksanakan Tugasan SQL
Pendekatan lain ialah Laksanakan Tugasan 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
Ini menjana pertanyaan SQL yang merangkumi ID yang diambil dalam klausa IN. Berikan output kepada pembolehubah User::MyVariableList dan gunakannya sebagai Sumber OLEDB untuk pengambilan data daripada pangkalan data kedua.
Atas ialah kandungan terperinci Bagaimana untuk Menyoal Berbilang Pangkalan Data dalam SSIS Berdasarkan Data Diperoleh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!