Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SSIS - Menggunakan wadah loop foreach untuk memperbarui catatan setelah transfer

Mungkin, Anda telah menemukan jawaban untuk pertanyaan Anda sekarang. Jawaban ini adalah untuk membantu orang lain yang mungkin tersandung pada pertanyaan ini. Berikut adalah opsi yang mungkin dapat digunakan untuk menyelesaikan transfer data menggunakan SSIS. Saya berasumsi bahwa Anda masih dapat membuat string koneksi yang menunjuk ke server A dan B Anda dari paket SSIS. Jika asumsi itu salah, beri tahu saya agar saya dapat menghapus jawaban ini. Dalam contoh ini, saya menggunakan SQL Server 2008 R2 sebagai backend. Karena saya tidak memiliki dua server, saya telah membuat dua tabel identik dalam Schemas yang berbeda ServerA dan ServerB .

Proses langkah demi langkah:

  1. Di Connection manager bagian dari SSIS, buat dua Koneksi OLE DB yaitu ServerA dan ServerB . Contoh ini menunjuk ke server yang sama tetapi dalam skenario Anda, koneksi harus mengarah ke dua server Anda yang berbeda. Lihat tangkapan layar #1 .

  2. Buat dua skema ServerA dan ServerB . Buat tabel dbo.ItemInfo dalam kedua skema. Buat skrip untuk tabel ini diberikan di bawah Skrip bagian. Sekali lagi, objek ini hanya untuk contoh ini.

  3. Saya telah mengisi kedua tabel dengan beberapa data sampel. Tabel ServerA.ItemInfo berisi 2,222 rows dan tabel ServerB.ItemInfo berisi 10,000 rows . Sesuai pertanyaan, 7.778 . yang hilang baris harus ditransfer dari ServerB ke ServerA . Lihat tangkapan layar #2 .

  4. Pada tab aliran kontrol paket SSIS, tempatkan tugas aliran data seperti yang ditunjukkan pada tangkapan layar #3 .

  5. Klik dua kali pada tugas aliran data untuk menavigasi ke tab aliran data dan mengonfigurasi tugas aliran data seperti yang dijelaskan di bawah ini. Server B adalah OLE DB Source; Temukan catatan di Server A adalah Lookup transformation task dan Server A adalah OLE DB Destination .

  6. Konfigurasikan OLE DB Source Server B seperti yang ditunjukkan pada tangkapan layar #4 dan #5 .

  7. Konfigurasikan Lookup transformation task Temukan catatan di Server A seperti yang ditunjukkan pada tangkapan layar #6 - #8 . Dalam contoh ini, ItemId adalah kunci unik. Oleh karena itu, itu adalah kolom yang digunakan untuk mencari catatan yang hilang di antara dua tabel. Karena kita hanya membutuhkan baris yang tidak ada di Server A , kita perlu memilih opsi Redirect rows to no match output .

  8. Tempatkan OLE DB Destination pada tugas aliran data. Saat Anda menghubungkan tugas transformasi pencarian dengan OLE DB Destination, Anda akan diminta dengan Input Output Selection dialog. Pilih Lookup No Match Output dari dialog seperti yang ditunjukkan pada tangkapan layar #9 . Konfigurasikan OLE DB Destination Server A seperti yang ditunjukkan pada tangkapan layar #10 dan #11 .

  9. Setelah tugas aliran data dikonfigurasi, itu akan terlihat seperti yang ditunjukkan pada tangkapan layar #12 .

  10. Contoh eksekusi paket ditunjukkan pada tangkapan layar #13 . Seperti yang Anda lihat, 7,778 rows yang hilang telah ditransfer dari Server B ke Server A . Lihat tangkapan layar #14 untuk melihat jumlah record tabel setelah eksekusi paket.

  11. Karena persyaratannya adalah hanya memasukkan catatan yang hilang, pendekatan ini telah digunakan. Jika Anda ingin memperbarui catatan yang ada dan menghapus catatan yang tidak valid lagi, silakan lihat contoh yang saya berikan di tautan. Layanan Integrasi SQL untuk memuat file yang dibatasi tab? Contoh di tautan menunjukkan cara mentransfer file datar ke SQL tetapi memperbarui catatan yang ada dan menghapus catatan yang tidak valid. Selain itu, contoh ini disesuaikan dengan baik untuk menangani sejumlah besar baris.

Semoga membantu.

Skrip

.

CREATE SCHEMA [ServerA] AUTHORIZATION [dbo]
GO

CREATE SCHEMA [ServerB] AUTHORIZATION [dbo]
GO

CREATE TABLE [ServerA].[ItemInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO

CREATE TABLE [ServerB].[ItemInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO

Tangkapan Layar #1:

Tangkapan Layar #2:

Tangkapan Layar #3:

Tangkapan layar #4:

Tangkapan layar #5:

Tangkapan layar #6:

Tangkapan layar #7:

Tangkapan layar #8:

Tangkapan layar #9:

Tangkapan layar #10:

Tangkapan layar #11:

Tangkapan layar #12:

Tangkapan layar #13:

Tangkapan layar #14:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui substring kolom

  2. Ubah 'waktu' menjadi 'datetime2' di SQL Server (Contoh T-SQL)

  3. Perbandingan harga produk di sql

  4. SQL Server 2008:Kesalahan mengonversi tipe data nvarchar ke float

  5. Apakah rollback diperlukan jika kueri dilengkapi dengan kesalahan?