[sql] SQL Server에서 한 데이터베이스에서 다른 데이터베이스로 테이블 복사

foo라는 데이터베이스와 bar라는 데이터베이스가 있습니다. foo에 tblFoobar라는 테이블이 있는데 데이터베이스 foo에서 데이터베이스 막대로 (데이터 및 모두) 이동하려고합니다. 이 작업을 수행하기위한 SQL 문은 무엇입니까?



답변

SQL Server에서? 같은 데이터베이스 서버에서? 세 부분으로 명명합니다.

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

이것은 단지 데이터를 이동시킵니다. 테이블 정의 (및 권한 및 인덱스와 같은 다른 속성)를 이동하려면 다른 작업을 수행해야합니다.


답변

SQL Server Management Studio의 “데이터 가져 오기”작업 (DB 이름을 마우스 오른쪽 단추로 클릭 한 다음 작업)이 대부분의 작업을 수행합니다. 데이터를 복사하려는 데이터베이스에서 실행하십시오.

테이블이 존재하지 않으면 테이블이 만들어 지지만 인덱스 등을 다시 만들어야 할 수도 있습니다. 테이블이 존재하면 기본적으로 새 데이터를 추가하지만 기존 데이터를 모두 삭제하도록 해당 맵핑을 편집 (매핑 편집) 할 수 있습니다.

나는 이것을 항상 사용하며 상당히 잘 작동합니다.


답변

이것은 작동해야합니다 :

SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable 

constaint, defaults 또는 index 는 복사 하지 않습니다 . 생성 된 테이블 에는 클러스터형 인덱스 가 없습니다 .

또는 다음을 수행 할 수 있습니다.

INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable

대상 테이블이 존재하고 비어있는 경우


답변

그것이 하나의 테이블이라면 당신이해야 할 일은

  • 스크립트 테이블 정의
  • 다른 데이터베이스에서 새 테이블 만들기
  • 규칙, 색인, 권한 등
  • 데이터 가져 오기 (예에 대한 여러 삽입은 이미 위에 표시되어 있음)

고려해야 할 사항 중 하나는 나중에 다른 개체를 마이그레이션하는 것과 같은 다른 업데이트입니다. 소스 테이블과 대상 테이블의 이름이 동일하지 않습니다. 즉, 뷰, 저장 프로 시저 및 기타와 같은 종속 개체를 변경해야 할 수도 있습니다.

어떤 문제없이 수동으로 갈 수있는 하나 또는 여러 개의 개체를 정하십시오. 그러나 업데이트가 몇 개 이상인 경우 타사 비교 도구가 매우 유용합니다. 지금 은 스키마 마이그레이션에 ApexSQL Diff 를 사용하고 있지만 다른 도구로는 문제가 없습니다.


답변

  1. 스크립트는 create table관리 스튜디오에서 테이블을 만들 줄에 해당 스크립트를 실행합니다. (오브젝트 탐색기에서 테이블을 마우스 오른쪽 버튼으로 클릭하고 스크립트 테이블을 다음으로 작성하십시오 …)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table


답변

당신은 또한 사용할 수 있습니다 생성 SQL 서버 스크립트 마법사 다음과 같은 작업을 수행 할 수 SQL 스크립트의 그것의 생성을 안내하기를 :

  • 테이블 스키마 복사
  • 제한 조건 (ID, 기본값 등)
  • 테이블 내의 데이터
  • 필요한 경우 다른 많은 옵션

스크린 샷이 표시된 SQL Server 2008의 좋은 워크 플로 예는 다음과 같습니다 .


답변

이 방법으로 갈 수 있습니다 : (일반적인 예)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers

또한 insert 절에 넣고 열 이름을 생성 해야하는 경우 다음을 사용하십시오.

    select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')

결과를 복사하여 쿼리 창에 붙여 넣어 테이블 열 이름을 나타내면 ID 열도 제외됩니다.

    select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0

데이터베이스가 동일한 위치에있는 경우 행을 복사하는 스크립트가 작동합니다.


당신은 이것을 시도 할 수 있습니다.

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>

두 DB가 동일한 서버에있는 경우 서버 이름은 선택 사항입니다.