prosource

SQL Server에서 데이터베이스 간에 테이블 복사

probook 2023. 4. 8. 08:40
반응형

SQL Server에서 데이터베이스 간에 테이블 복사

foo라는 데이터베이스와 bar라는 데이터베이스가 있습니다.foo에 tblFoobar라는 테이블이 있습니다.이 테이블은 database foo에서 database bar로 이동합니다.이를 위한 SQL 문은 무엇입니까?

SQL Server Management Studio의 "데이터 가져오기" 작업(DB 이름 오른쪽 클릭 후 작업)이 대부분의 작업을 수행합니다.데이터를 복사할 데이터베이스에서 실행합니다.

테이블이 존재하지 않으면 테이블이 작성되지만 인덱스 등을 다시 작성해야 할 수도 있습니다.테이블이 존재하는 경우 기본적으로 새 데이터가 추가되지만 기존 데이터가 모두 삭제되도록 조정(매핑 편집)할 수 있습니다.

나는 이것을 항상 사용하고 있고 꽤 잘 작동한다.

SQL Server와 동일한 데이터베이스 서버에 있습니까?세 개의 부품 이름을 사용합니다.

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

이렇게 하면 데이터가 이동됩니다.테이블 정의(및 권한 및 인덱스 등 기타 속성)를 이동하려면 다른 작업을 수행해야 합니다.

이 조작은 유효합니다.

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

제약 조건, 기본값 또는 인덱스는 복사되지 않습니다.생성된 테이블에는 클러스터된 인덱스가 없습니다.

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

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

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

한 테이블이면 돼요.

  • 스크립트 테이블 정의
  • 다른 데이터베이스에 새 테이블 만들기
  • 규칙, 인덱스, 권한 등의 갱신
  • 데이터 가져오기(예제에 대한 여러 삽입이 이미 위에 나와 있음)

한 가지 고려해야 할 것은 향후 다른 오브젝트의 이행 등 기타 갱신입니다.송신원테이블과 행선지테이블의 이름이 같지 않은 것에 주의해 주세요.즉, 뷰, 스토어드 프로시저 등의 오브젝트에 의존한 경우에도 변경을 가해야 합니다.

수동으로 이동할 수 있는 하나 또는 여러 개체를 흰색으로 만듭니다.다만, 업데이트가 몇개인가 있는 경우는, 서드 파티제의 비교 툴이 매우 편리합니다.현재 스키마 마이그레이션에 ApexSQL Diff를 사용하고 있지만 다른 툴에서는 문제가 발생하지 않습니다.

  1. 스크립트 작성create tablemanagement studio에서 해당 스크립트를 바에서 실행하여 테이블을 만듭니다.(오브젝트 탐색기의 테이블 오른쪽 클릭, 스크립트 테이블 as, create to...)

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

또한 SQL Server 스크립트 생성 마법사를 사용하여 다음을 수행할 수 있는 SQL 스크립트 생성을 안내할 수 있습니다.

  • 테이블 스키마를 복사하다
  • 모든 제약 조건(예: 디폴트 값 등)
  • 테이블 내의 데이터
  • 기타 많은 옵션(필요한 경우)

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가 동일한 서버에 있는 경우 서버 이름은 선택 사항입니다.

다음 세 가지 옵션을 제공합니다.

동일한 인스턴스에 있는 두 개의 데이터베이스인 경우 다음 작업을 수행합니다.

SELECT  * INTO My_New_Table FROM [HumanResources].[Department];

서로 다른 서버에 있는 두 개의 데이터베이스이며 연결된 서버가 있는 경우 다음 작업을 수행합니다.

SELECT  * INTO My_New_Table FROM [ServerName].[AdventureWorks2012].[HumanResources].[Department];

서로 다른 서버에 있는 두 개의 데이터베이스이며 연결된 서버가 없는 경우, 다음 작업을 수행합니다.

SELECT * INTO My_New_Table
FROM OPENROWSET('SQLNCLI', 'Server=My_Remote_Server;Trusted_Connection=yes;',
     'SELECT * FROM AdventureWorks2012.HumanResources.Department');

언급URL : https://stackoverflow.com/questions/187770/copy-tables-from-one-database-to-another-in-sql-server

반응형