Tôi là người hoàn toàn không thoải mái với SSIS.
Khi các bảng nguồn không có cột định danh
- tạo một cơ sở dữ liệu trống tại máy chủ đích
- tạo một máy chủ được liên kết đến máy chủ nguồn trên máy chủ đích
- chạy tập lệnh bên dưới trên cơ sở dữ liệu nguồn để tạo các câu lệnh select * thành ...
- chạy tập lệnh được tạo từ cơ sở dữ liệu đích
- kịch bản khóa chính, chỉ mục, trình kích hoạt, chức năng và quy trình từ cơ sở dữ liệu nguồn
- tạo các đối tượng này bằng tập lệnh được tạo
Bây giờ T-SQL để tạo các câu lệnh Chọn * thành ...
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
Điều này tạo ra một dòng cho mỗi bảng để sao chép như
select * into [Table1] from [linked_server].[source_db].[dbo].[Table1];
Trong trường hợp các bảng chứa các cột định danh, tôi kịch bản các bảng bao gồm các thuộc tính nhận dạng và các khóa chính.
Tôi không sử dụng insert vào ... select ... bằng cách sử dụng máy chủ được liên kết trong trường hợp này, vì đây không phải là kỹ thuật hàng loạt. Tôi đang làm việc trên một số tập lệnh PowerShell tương tự như [câu hỏi SO 1 này , nhưng tôi vẫn đang xử lý lỗi. Các bảng thực sự lớn có thể gây ra lỗi bộ nhớ, vì toàn bộ bảng được tải vào bộ nhớ, trước khi nó được gửi qua SQLBulkCopy đến cơ sở dữ liệu.
Giải trí các chỉ số, vv tương tự như trường hợp trên. Lần này tôi có thể bỏ qua việc giải trí các phím chính.