programing

SQL Server 간에 테이블 데이터 내보내기

linuxpc 2023. 5. 31. 15:23
반응형

SQL Server 간에 테이블 데이터 내보내기

두 개의 SQL 서버(둘 다 2005년 버전)가 있습니다.

여러 테이블을 한 테이블에서 다른 테이블로 마이그레이션하려고 합니다.

시도해 본 결과:

  • 버튼으로 에서 " 원본서서데베이스를마우다오클니습했릭단추로쪽른"를 선택했습니다. 선택됨Tasks/Generate scripts는 문는아래있것다입니다는에제▁under다▁the▁that니것입▁is▁problem.Table/View options .Script data선택.

  • 그다음에 제가.Script Table As/Create scriptSQL 파일을 생성하여 대상 서버에 테이블을 만듭니다.하지만 저는 여전히 모든 데이터가 필요합니다.

그런 다음 다음을 사용해 보았습니다.

SELECT * 
INTO [destination server].[destination database].[dbo].[destination table] 
FROM [source server].[source database].[dbo].[source table]

하지만 오류가 발생했습니다.

개체에 최대 접두사 수보다 많습니다.최대값은 2입니다.

누가 제 문제에 대한 올바른 해결책을 알려주실 수 있나요?

사용해 보십시오.

  1. 사대서테상만다듭의 하여 대상 .Script Table As / Create Script

  2. 그런 다음 대상 서버에서 T-SQL 문을 실행할 수 있습니다.

    INSERT INTO dbo.YourTableNameHere
       SELECT *
       FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
    

이것은 잘 작동할 것입니다.

또 다른 옵션(SQL Server 2008 이상의 경우)을 보여드리겠습니다.

  1. 데이터베이스를 마우스 오른쪽 버튼으로 클릭 -> '작업' -> '스크립트 생성'을 선택합니다.
  2. 복사할 특정 데이터베이스 개체를 선택합니다.하나 이상의 테이블을 예로 들어 보겠습니다.다음 클릭
  3. 고급을 클릭하고 '스크립트할 데이터 유형'으로 스크롤한 후 '스키마 및 데이터'를 선택합니다.확인 클릭
  4. 생성된 스크립트를 저장할 위치를 선택하고 다음을 클릭하여 진행합니다.

서버를 연결할 수 있는 권한이 없는 경우 SQL Server 가져오기/내보내기 마법사를 사용하여 한 서버에서 다른 서버로 테이블을 가져오는 단계는 다음과 같습니다.

  • 복사할 원본 데이터베이스를 마우스 오른쪽 단추로 클릭합니다.
  • [태스크] - [데이터 내보내기]를 선택합니다.
  • 데이터 소스에서 SQL Server Native Client를 선택합니다.
  • 인증 유형(Sql Server 또는 Windows 인증)을 선택합니다.
  • 원본 데이터베이스를 선택합니다.
  • 그런 다음 대상: SQL Server Native Client를 선택합니다.
  • 서버 이름(테이블을 복사할 서버)을 입력합니다.
  • 인증 유형(Sql Server 또는 Windows 인증)을 선택합니다.
  • 대상 데이터베이스를 선택합니다.
  • 데이터 복사를 선택합니다.
  • 목록에서 테이블을 선택합니다.
  • 다음을 누르고 즉시 실행을 선택하거나 나중에 실행하려면 선택적으로 패키지를 파일 또는 SQL 서버에 저장할 수도 있습니다.
  • 끝내라.

작업/스크립트 생성에 스크립트 테이블 옵션이 있습니다!나도 처음에 그것을 놓쳤어요!그러나 삽입 스크립트를 생성할 수 있습니다(매우 좋은 기능이지만 직관적이지 않은 위치에서).

"스크립팅 옵션 설정" 단계가 나타나면 "고급" 탭으로 이동합니다.

여기에 설명된 단계(사진은 이해할 수 있지만, 저는 라트비아어로 씁니다.

SQL Server 가져오기내보내기 마법사(Tasks -> Export Data)를 사용해 보십시오.

대상 데이터베이스에 테이블을 만들 수 있습니다.반면에 스크립트 마법사는 테이블 구조만 만들 수 있습니다.

스크립트를 사용하여 테이블을 이미 만든 경우 BCP 명령을 사용하여 원본 서버의 모든 데이터를 대상 서버로 복사하는 것이 데이터를 복사하는 또 다른 방법입니다.

테이블 데이터를 원본 서버의 텍스트 파일로 내보내는 방법

bcp <database name>.<schema name>.<table name> OUT C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password> 

대상 서버의 텍스트 파일에서 테이블 데이터를 가져오는 방법

bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>

소스에서 대상으로 데이터를 복사하는 경우:

use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>

그냥 재미로.

할 수 할 수 입니다.INSERT INTO저는 다음을 했습니다.

  • 프로덕션 서버 데이터베이스의 백업 생성
  • 테스트 서버에서 데이터베이스 복원
  • 문에 삽입을 실행

뒷문으로 해결하는 방법이지만, 제가 문제가 있었기 때문에 효과가 있었습니다.

다음을 사용하여 빈 테이블을 만들었기 때문입니다.SCRIPT TABLE AS / CREATE 사용할 수 .SELECT INTO.SELECT INTO테이블이 대상 위치에 없지만 키와 인덱스를 복사하지 않는 경우에만 작동하므로 수동으로 작업해야 합니다.을 사용할 INSERT INTO모든 열 이름을 수동으로 제공해야 하며 일부 외부 키 제약 조건이 실패할 경우 문제가 발생할 수 있습니다.

모든 답변 덕분에 몇 가지 훌륭한 해결책이 있지만 marc_sanswer를 받아들이기로 결정했습니다.

원본/대상 서버를 선택할 수 없습니다.

데이터베이스가 동일한 서버에 있는 경우 다음 작업을 수행할 수 있습니다.

테이블의 열이 동일한 경우(순서 포함!) 다음 작업을 수행할 수 있습니다.

INSERT INTO [destination database].[dbo].[destination table]
SELECT *
FROM [source database].[dbo].[source table]

원본 데이터베이스를 백업/복원할 수 있습니다.이 작업을 더 자주 수행해야 하는 경우 원본 데이터베이스를 정의하는 SSIS 프로젝트를 시작하고(모든 서버에서 연결을 선택할 수 있음) 데이터를 이동하는 프로젝트를 만드는 것이 좋습니다.자세한 내용은 여기를 참조하십시오. http://msdn.microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx

데이터 가져오기/내보내기를 통해 수행할 수 있습니다.SQL Server Management Studio에서

이것은 다소 우회적인 해결책이지만 저에게는 효과가 있었습니다. 다른 사람들에게도 효과가 있기를 바랍니다.

내보낼 테이블에서 SQL 선택 조회를 실행하고 결과를 드라이브에 .xls로 저장할 수 있습니다.

이제 모든 열과 인덱스를 사용하여 데이터를 추가할 테이블을 만듭니다.이 작업은 실제 테이블을 마우스 오른쪽 버튼으로 누르고 Create To script 옵션을 선택하면 쉽게 수행할 수 있습니다.

이제 테이블을 추가할 DB를 마우스 오른쪽 단추로 클릭하고 태스크 > 가져오기를 선택할 수 있습니다.

내보내기 가져오기 마법사가 열리고 다음을 선택합니다.Microsoft Excel을 입력 데이터 원본으로 선택한 다음 이전에 저장한 .xls 파일을 찾아 선택합니다.

이제 대상 서버와 이미 작성한 대상 테이블을 선택합니다.

참고: ID 기반 필드가 있으면 대상 테이블에 ID 속성을 제거할 수 있습니다. 이 데이터도 삽입됩니다. 따라서 ID 속성으로만 사용할 경우 가져오기 프로세스가 오류가 발생합니다.

next를 누르고 finish를 누르면 가져온 레코드 수가 표시되고 오류가 발생하지 않으면 성공을 반환합니다.

사용 가능한 경우 다른 옵션: c#.net.특히, 마이크로소프트.SqlServer.관리.Smo 네임스페이스.

SSIS 패키지 중 하나의 스크립트 구성 요소에서 다음과 유사한 코드를 사용합니다.

var tableToTransfer = "someTable";
var transferringTableSchema = "dbo";

var srvSource = new Server("sourceServer");
var dbSource = srvSource.Databases["sourceDB"];

var srvDestination = new Server("destinationServer"); 
var dbDestination = srvDestination.Databases["destinationDB"];

var xfr = 
    new Transfer(dbSource) {
        DestinationServer = srvDestination.Name,
        DestinationDatabase = dbDestination.Name,
        CopyAllObjects = false,
        DestinationLoginSecure = true,
        DropDestinationObjectsFirst = true,
        CopyData = true
    };

xfr.Options.ContinueScriptingOnError = false; 
xfr.Options.WithDependencies = false; 

xfr.ObjectList.Add(dbSource.Tables[tableToTransfer,transferringTableSchema]);
xfr.TransferData();

마이크로소프트를 명시적으로 검색하고 추가해야 했다고 생각합니다.SqlServer.참조에 대한 Smo 라이브러리.하지만 그 외에도, 이것은 저에게 잘 해결되었습니다.

업데이트: 네임스페이스와 라이브러리는 제가 기억하는 것보다 더 복잡했습니다.

라이브러리의 경우 다음에 참조를 추가합니다.

  • 마이크로소프트.SqlServer.Smo.dll
  • 마이크로소프트.SqlServer.SmoExtended.dll
  • 마이크로소프트.SqlServer.ConnectionInfo.dll
  • 마이크로소프트.SqlServer.관리.Sdk.Sfc.dll

네임스페이스의 경우 다음을 추가합니다.

  • 마이크로소프트.SqlServer.관리.흔한
  • 마이크로소프트.SqlServer.관리.스모

언급URL : https://stackoverflow.com/questions/11009189/export-table-data-from-one-sql-server-to-another

반응형