Moim zadaniem jest tworzenie przepływu pracy w SSIS, gdzie będzie kopiowanie danych z każdej tabeli z serwera A do tych samych tabel w serwerze B. Na razie zatrzymałem się w kroku, gdzie podejmuję dane z serwera i skopiować go na serwer B. Do tej pory stworzyłem przepływ pracy, w którym kroki są takie poniżej:

  1. Odczyt danych z pliku Excel, gdzie są umieszczone nazwy tabel, które mają być przetwarzane
  2. Włóż te wiersze w bazie danych docelowej (serwer b) na przyszłość
  3. W przepływie sterującym podłączony powyżej kroki do następnego obiektu - Wykonaj zadanie SQL, w którym wewnątrz biorę wszystkie załadowane nazwy z tabeli do globalnej zmiennej projektu o nazwie "Globallistofables".
  4. Stworzył kolejną zmienną "LokalTable", gdzie przechowywam każdy wiersz "Globallistofables" zmiennej / zestawu, którego używam później w "dla pętli".

Tutaj zatrzymałem się i co chcę zrobić, to:

  1. Wewnątrz tej pętli zdobądź wszystkie dane z serwerze źródłowej każdej tabeli za pomocą utworzonej zmiennej "LokalTable" i po włożeniu tego wszystkie dane do serwera docelowego w tej samej nazwie tabeli, jak znajduje się w zmiennej "LokalTable".

Ten ostatni punkt 5 sprawia, że jestem trochę zdezorientowany, ponieważ stoły będą się różnić od siebie, więc nie ma żadnego wzoru stolików.

Czy ktoś może mi znać, jak powinienem zrobić w SSIS i która kontrola powinienem wziąć z dostępnej listy, aby osiągnąć punkt 5?

3
DKM 22 luty 2019, 19:53

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć obiektów C # SMO z zadania skryptu, aby wykonać transfer na dynamiczny listę tabel. Pętla SSIS nie będzie konieczna. Zmienna obiektu SSIS (GlobalListOfTables) będzie musiał być zawarty w polu ReadOnlyVariables na zadaniu skryptu. Upewnij się, że dodaj Microsoft.sqlserver.smoReExted i Microsoft.sqlserver.ConnectionInfo do zadania skryptu oprócz tych wymienionych poniżej.

using System.Data;
using Microsoft.SqlServer.Management.Smo;
using System.Collections.Generic;
using System.Data.OleDb;



       string databaseName = "DatabaseName";
       List<string> tableNames = new List<string>();
       DataTable dt = new DataTable();
       OleDbDataAdapter dataAdapter = new OleDbDataAdapter();

        //get table names from SSIS object variable
       dataAdapter.Fill(dt, Dts.Variables["User::SourceServerName"].Value);

        //populate list
        foreach (DataRow dr in dt.Rows)
        {
          tableNames.Add(dr[0].ToString());
        }

        //create source server object
        Server srcServ = new Server(@"SourceServerName");
        srcServ.ConnectionContext.LoginSecure = true;
        srcServ.ConnectionContext.StatementTimeout = 600;
        srcServ.ConnectionContext.Connect();

        //define source database as smo object
        Database sourceDatabase = srcServ.Databases["SourceDatabaseName"];

        Transfer transfer = new Transfer();
        transfer.Database = sourceDatabase;

        //set destination server and database
        transfer.DestinationServer = @"DestinationServerName";
        transfer.DestinationDatabase = databaseName;

        //overwrite objects if they exist
        transfer.DropDestinationObjectsFirst = true;

        transfer.CopyAllObjects = false;
        transfer.CopySchema = true;

        //include data
        transfer.CopyData = true;

        foreach (Table t in sourceDatabase.Tables)
        {   
            //extract table names that were originally in SSIS object variable and avoid system objects
            if (tableNames.Contains(t.Name) && !t.IsSystemObject)
            {
                transfer.ObjectList.Add(t);
            }
        }
        //transfer objects
         transfer.TransferData();
2
userfl89 22 luty 2019, 20:05

Transfer zadanie bazy danych i przesyłanie zadania obiektów SQL Server

Jeśli chcesz skopiować wszystkie dane z bazy danych, należy odnieść się do Transfer Database Task i Transfer SQL Server Objects Task:

W oparciu o Dokumentacja bazy danych transferu Dokumentacja:

Zadanie bazy danych transferu przenosi bazy danych SQL Server między dwoma instancjami SQL Server. W przeciwieństwie do innych zadań, które przesyłają tylko obiekty SQL Server, kopiując je, zadanie bazy danych Transfer może kopiować lub przenieść bazę danych. To zadanie może być również używane do skopiowania bazy danych na tym samym serwerze.

Również oparty na Transfer SQL Server Obiekty zadanie oficjalna dokumentacja:

Transferowe obiekty SQL Server Obiekty przenosi jeden lub więcej typów obiektów w bazie danych SQL Server między instancjami SQL Server. Na przykład zadanie może skopiować tabele i procedury przechowywane. W zależności od wersji SQL Server, który jest używany jako źródło, dostępne są różne typy obiektów do skopiowania. Na przykład tylko bazy danych SQL Server zawiera schematy i zdefiniowane przez użytkownika agregaty.

Szczegółowe artykuły

Istnieje wiele artykułów opisujących, jak pracować z tymi zadaniami i wszystkimi dostępnymi opcjami, jak Przykład:

3
Hadi 22 luty 2019, 22:43