Saya orang yang benar-benar tidak nyaman dengan SSIS.
Ketika tabel sumber tidak memiliki kolom identitas
- buat database kosong di server target
- buat server tertaut ke server sumber pada server target
- jalankan skrip di bawah ini pada basis data sumber untuk menghasilkan pernyataan * pilih ke ...
- jalankan skrip yang dihasilkan dari database target
- skrip kunci utama, indeks, pemicu, fungsi dan prosedur dari sumber database
- buat objek-objek ini dengan skrip yang dihasilkan
Sekarang T-SQL untuk menghasilkan pernyataan Select * into ...
SET NOCOUNT ON
declare @name sysname
declare @sql varchar(255)
declare db_cursor cursor for
select name from sys.tables order by 1
open db_cursor
fetch next from db_cursor into @name
while @@FETCH_STATUS = 0
begin
Set @sql = 'select * into [' + @name + '] from [linked_server].[source_db].[dbo].[' + @name + '];'
print @sql
fetch next from db_cursor into @name
end
close db_cursor
deallocate db_cursor
Ini menghasilkan garis untuk setiap tabel untuk menyalin suka
select * into [Table1] from [linked_server].[source_db].[dbo].[Table1];
Dalam hal tabel berisi kolom identitas, saya skrip tabel termasuk properti identitas dan kunci utama.
Saya tidak menggunakan masukkan ke ... pilih ... menggunakan server yang terhubung dalam hal ini, karena ini bukan teknik massal. Saya sedang mengerjakan beberapa skrip PowerShell yang mirip dengan [pertanyaan SO 1 ini , tapi saya masih mengerjakan penanganan kesalahan. Tabel yang benar-benar besar dapat menyebabkan kesalahan memori, karena seluruh tabel dimuat ke dalam memori, sebelum dikirim melalui SQLBulkCopy ke database.
Rekreasi indeks dll. Mirip dengan kasus di atas. Kali ini saya dapat melewatkan rekreasi dari kunci utama.