2013-06-12 2 views
1

Я пытаюсь создать копию таблицы (без данных, только схемы) с использованием объектов управления SQL Server (SMO), Transfer. Единственное, что я не понял, - это указать, какой сервер будет копироваться, когда серверы находятся на разных хостах. В моем случае, я хочу скопировать из 10.1.2.x в 10.1.2.y. Есть ли способ указать это, или этот класс не поддерживает его?Копирование таблицы с одного SQL Server на другой

Возможно, существуют лучшие решения на C#?

static void CreateTableFromTable(string fromConnection, string toConnection, string dbName, string tablename, bool copyData = false) 
{ 
    Server fromServer = new Server(new ServerConnection(new SqlConnection(fromConnection))); 
    Database db = fromServer.Databases[dbName]; 

    Transfer transfer = new Transfer(db); 
    transfer.CopyAllObjects = false; 
    transfer.DropDestinationObjectsFirst = false; 
    transfer.CopySchema = false; //Database schema? Or Table schema? I DO NOT want to overwrite the db schema 
    transfer.CopyData = copyData; 
    transfer.DestinationServer = "?"; 
    transfer.DestinationDatabase = dbName; 
    transfer.Options.IncludeIfNotExists = true; 
    transfer.ObjectList.Add(db.Tables[tablename]); 

    transfer.TransferData(); 
} 

ответ

-2

Вы пытались использовать заявление SELECT ... INTO?

Например:

SELECT * INTO DestDatabase.TableName FROM SourceDatabase.TableName 

Если вы не хотите, чтобы скопировать данные, просто добавить условие, которое будет не возвращать ничего, напр: WHERE Id = 0

+0

И как бы вы указали IP-адреса серверов, содержащих базы данных? – SamiHuutoniemi

+0

Просто поместите его на

+0

Как? Это не похоже на то, что я могу набрать SELECT * INTO DestDatabase.TableName FROM 10.1.2.1.SourceDatabase.TableName – SamiHuutoniemi

1

Вы пробовали мастера импорта и экспорта данных, даже импорт данных таблицы, командной строки или графического интерфейса в SQL Server 2005/8 и Mysql/MysqlWorkbench.

0

Я не уверен, что вы нашли другое решение - или получили эту работу. Если вы не сделали SMO ​​Объект Scripter, возможно, стоит посмотреть.

Этот MSDN пример может быть полезным. Вы можете выполнить скрипты таблиц и зависимостей, которые хотите, а затем открыть соединение с целевой базой данных и выполнить сценарии.

static void Main(string[] args) 
{ 
    Server sourceServer = new Server("server"); 
    String dbName = "database"; 

    // Connect to the local, default instance of SQL Server. 

    // Reference the database. 
    Database db = sourceServer.Databases[dbName]; 

    // Define a Scripter object and set the required scripting options. 
    Scripter scripter = new Scripter(sourceServer); 
    scripter.Options.ScriptDrops = false; 
    scripter.Options.WithDependencies = true; 
    scripter.Options.Indexes = true; // To include indexes 
    scripter.Options.DriAllConstraints = true; // to include referential constraints in the script 

    // Iterate through the tables in database and script each one. Display the script. 
    foreach (Table tb in db.Tables) 
    { 
     // check if the table is not a system table 
     if (tb.IsSystemObject == false) 
     { 
      Console.WriteLine("-- Scripting for table " + tb.Name); 

      // Generating script for table tb 
      System.Collections.Specialized.StringCollection sc = scripter.Script(new Urn[] { tb.Urn }); 
      foreach (string st in sc) 
      { 
       //ado.net to destination 
       Console.WriteLine(st);//SqlCommand.ExecuteNonQuery(); 
      } 
      Console.WriteLine("--"); 
     } 
    } 
} 
Смежные вопросы