developer tip

한 SQL Server에서 다른 SQL Server로 테이블 데이터 내보내기

copycodes 2020. 12. 7. 08:23
반응형

한 SQL Server에서 다른 SQL Server로 테이블 데이터 내보내기


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

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

나는 시도했다 :

  • 소스 서버에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 Tasks/Generate scripts. 문제는 아래에 옵션 Table/View options이 없다는 Script data것입니다.

  • 그런 다음 Script Table As/Create script대상 서버에 테이블을 만들기 위해 SQL 파일을 생성했습니다. 하지만 여전히 모든 데이터가 필요합니다.

그런 다음 사용하려고 시도했습니다.

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. 생성 된 스크립트를 저장할 위치를 선택하고 다음을 클릭하여 계속하십시오.

Tasks / Generate scripts에 스크립트 테이블 옵션이 있습니다! 나는 또한 처음에는 그것을 놓쳤다! 그러나 거기에서 삽입 스크립트를 생성 할 수 있습니다 (매우 멋진 기능이지만 매우 직관적이지 않은 위치에 있음).

"스크립팅 옵션 설정"단계에 도달하면 "고급"탭으로 이동합니다.

여기에 설명 된 단계 (사진은 이해할 수 있지만 거기에서 라트비아어로 글을 씁니다).


SQL Server 가져 오기 및 내보내기 마법사 (작업-> 데이터 내보내기)를 사용해보십시오 .

대상 데이터베이스에 테이블을 생성하도록 제안합니다. 반면에, 스크립팅 마법사는 테이블 구조 만 생성 할 수 있습니다.


스크립트를 사용하여 테이블이 이미 생성 된 경우 데이터를 복사하는 또 다른 방법은 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>

킥을 위해서.

연결된 서버를 만들 수 없었고 프로덕션 서버에 연결하는 것만으로는 충분 INSERT INTO하지 않았기 때문에 다음을 수행했습니다.

  • 프로덕션 서버 데이터베이스의 백업을 만들었습니다.
  • 내 테스트 서버에서 데이터베이스를 복원했습니다.
  • 문에 삽입 실행

백도어 솔루션이지만 문제가 있었기 때문에 저에게 효과적이었습니다.

SCRIPT TABLE AS / CREATE모든 키와 인덱스를 전송하기 위해 빈 테이블을 만들었으므로 사용할 수 없습니다 SELECT INTO. SELECT INTO테이블이 대상 위치에 존재하지 않고 키와 인덱스를 복사하지 않는 경우에만 작동하므로 수동으로 수행해야합니다. using INSERT INTO문의 단점은 모든 열 이름을 수동으로 제공해야한다는 것입니다. 또한 일부 외래 키 제약 조건이 실패하면 몇 가지 문제가 발생할 수 있습니다.

모든 anwser 덕분에 몇 가지 훌륭한 솔루션이 있지만 marc_s anwser를 수락하기로 결정했습니다.


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

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

테이블의 열이 같으면 (순서를 포함하여!) 다음을 수행 할 수 있습니다.

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 Server 가져 오기 / 내보내기 마법사를 사용하여 한 서버에서 다른 서버로 테이블을 가져 오는 단계는 다음과 같습니다.

  • 복사 할 원본 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다.
  • 작업-데이터 내보내기를 선택합니다.
  • 데이터 소스에서 Sql Server Native Client를 선택합니다.
  • 인증 유형 (Sql Server 또는 Windows 인증)을 선택합니다.
  • Select the source database.
  • Next, choose the Destination: Sql Server Native Client
  • Type in your Server Name (the server you want to copy the table to).
  • Select your authentication type (Sql Server or Windows authentication).
  • Select the destination database.
  • Select Copy data.
  • Select your table from the list.
  • Hit Next, Select Run immediately, or optionally, you can also save the package to a file or Sql Server if you want to run it later.
  • Finish

For copying data from source to destination:

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

This is somewhat a go around solution but it worked for me I hope it works for this problem for others as well:

You can run the select SQL query on the table that you want to export and save the result as .xls in you drive.

Now create the table you want to add data with all the columns and indexes. This can be easily done with the right click on the actual table and selecting Create To script option.

Now you can right click on the DB where you want to add you table and select the Tasks>Import .

Import Export wizard opens and select next.Select the Microsoft Excel as input Data source and then browse and select the .xls file you have saved earlier.

Now select the destination server and also the destination table we have created already.

Note:If there is any identity based field, in the destination table you might want to remove the identity property as this data will also be inserted . So if you had this one as Identity property only then it would error out the import process.

Now hit next and hit finish and it will show you how many records are being imported and return success if no errors occur.


Yet another option if you have it available: c# .net. In particular, the Microsoft.SqlServer.Management.Smo namespace.

I use code similar to the following in a Script Component of one of my SSIS packages.

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();

I think I had to explicitly search for and add the Microsoft.SqlServer.Smo library to the references. But outside of that, this has been working out for me.

Update: The namespace and libraries were more complicated than I remembered.

For libraries, add references to:

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SmoExtended.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

For the Namespaces, add:

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo

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

반응형