2014-10-04 6 views
0

이제이 질문에 대한 질문을 받았을 수 있지만 찾은 답변 중 만족스럽지 않습니다. 간단히 말해 SQL Server Express의 한 인스턴스에서 데이터베이스간에 하나의 테이블 (데이터 포함)을 이동하는 것입니다.C#을 사용하여 두 SQL Server 데이터베이스간에 테이블 이동

나는 테이블 복사본을 만들고 이전 스크립트를 삭제하려고 시도했지만 C#을 사용하여 스크립트를 생성하는 것은 작은 악몽이며 계속 오른쪽 및 중심의 구문 문제를 계속 실행합니다. 나는 단순히 스크립트를 생성하기 위해 다음과 같은 코드를 시도했다하지만 난 구문 오류를 얻을 :

  string connectionString = "<myconnectionstring>"; 
      SqlConnection conn = new SqlConnection(connectionString); 
      string script = dbscript; 
      string dbscript = ScriptDatabase(); 
      Server server = new Server(new ServerConnection(conn)); 
      server.ConnectionContext.ExecuteNonQuery(script); 

은 다음 ScriptDatabase()가되는 경우로 :

public string ScriptDatabase() 
     { 
      string connectionString = "<myconnectionstring>"; 
      SqlConnection conn = new SqlConnection(connectionString); 

      Server server = new Server(new ServerConnection(conn)); 
      var sb = new StringBuilder(); 

      var database = server.Databases["dbname"]; 

      var scripter = new Scripter(server); 
      scripter.Options.ScriptData = true; 
      scripter.Options.ScriptDrops = false; 
      scripter.Options.IncludeHeaders = true; 
      //And so on .... 

      Microsoft.SqlServer.Management.Smo.Table t = database.Tables["tablename"]; 

      var smoObjects = new Urn[1]; 

       smoObjects[0] = t.Urn; 
       if (t.IsSystemObject == false) 
       { 

        foreach (var st in scripter.EnumScript(smoObjects)) 
        { 
         sb.Append(st); 
        } 
       } 
      return sb.ToString(); 
     } 

내가 가진 다른 큰 문제는 내가 생성 어떻게입니다 데이터베이스에서 하나의 테이블에 대한 스크립트를 열어 USE [CurrentDB] 문이 USE [OtherDB]으로 생성되도록 하시겠습니까?

감사합니다.

+1

[SMO] (http://msdn.microsoft.com/en-us/library/Microsoft.SqlServer.Management.Smo.aspx) 특히 [Transfer class] (http://msdn.microsoft.com)를 사용하십시오. /en-us/library/microsoft.sqlserver.management.smo.transfer.aspx) –

답변

1

왜 SQL로하지 않습니까?

Set Nocount On 
Select * Into destinationDb.dbo.destinationTable From sourceDB.dbo.sourceTable 
drop table sourceDB.dbo.sourceTable 

전체 원본 테이블 (스키마 및 데이터)을 대상 데이터베이스에 복사 한 다음 원본을 삭제합니다. "사용"문은 필요하지 않으며 매우 빠릅니다.

당신이하려는 일입니까? 분명히 C#을 통해 SQL 명령과 ExecuteNotQuery()를 사용하여이 코드를 실행할 수 있습니다.