나는 SSIS에 완전히 불편한 사람입니다.
소스 테이블에 ID 열이없는 경우
- 대상 서버에서 빈 데이터베이스를 작성하십시오.
- 대상 서버에서 원본 서버에 연결된 서버를 만듭니다.
- select * into ... 문을 생성하기 위해 소스 데이터베이스에서 아래 스크립트를 실행하십시오.
- 대상 데이터베이스에서 생성 된 스크립트를 실행하십시오.
- 소스 데이터베이스의 스크립트 기본 키, 인덱스, 트리거, 기능 및 프로 시저
- 생성 된 스크립트로 이러한 객체를 생성
이제 Select * into ... 문을 생성하는 T-SQL
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
이렇게하면 각 테이블마다 복사 할 줄이 생성됩니다.
select * into [Table1] from [linked_server].[source_db].[dbo].[Table1];
테이블에 ID 열이 포함 된 경우 ID 속성 및 기본 키를 포함하여 테이블을 스크립팅합니다.
이것은 대량 기술이 아니기 때문에 연결된 서버를 사용하여 insert into ... select ...를 사용하지 않습니다. [이 SO 질문 1 과 유사한 일부 PowerShell 스크립트에서 작업하고 있지만 여전히 오류 처리 작업을하고 있습니다. SQLBulkCopy를 통해 데이터베이스로 보내기 전에 전체 테이블이 메모리에로드되므로 실제로 큰 테이블은 메모리 부족 오류를 유발할 수 있습니다.
지수 등의 재생산은 위의 경우와 유사합니다. 이번에는 기본 키의 재생을 건너 뛸 수 있습니다.