2010-09-03 2 views
0

Мне бы очень хотелось использовать ADO.NET для создания сценария CREATE TABLE для создания точной копии данной таблицы.Код для генерации схемы таблицы SQL Server из ADO.NET

Причиной этого является тестирование настойчивость. Я хотел бы знать, будет ли мое приложение сохраняться в конкретной базе данных. Я хотел бы указать приложение в базу данных и таблицу, а затем приложение создаст новую базу данных с точной копией указанной таблицы. Таким образом, тестирование настойчивость может иметь место против клонированной таблицы, не касаясь исходной базы данных, и когда я закончил, новую базу данных можно просто удалить.

Прежде чем я приступлю к этому амбициозному проекту, я хотел бы знать, существует ли что-либо. Я пробовал Google, но все, что я могу найти, это способы получить SQL-генерацию SQL-кода через SSMS-интерфейс, а не через код.

ответ

3

Для этого можно использовать SQL Management Objects (SMO).

Пример (С #)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Microsoft.SqlServer.Management.Smo; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Server srv = new Server(@".\SQLEXPRESS"); 
      Database db = srv.Databases["MyDB"]; 

      Scripter scrp = new Scripter(srv); 
      scrp.Options.ScriptDrops = false; 
      scrp.Options.WithDependencies = true; 

      //Iterate through the tables in database and script each one. Display the script. 
      //Note that the StringCollection type needs the System.Collections.Specialized namespace to be included. 
      Microsoft.SqlServer.Management.Sdk.Sfc.Urn[] smoObjects = new Microsoft.SqlServer.Management.Sdk.Sfc.Urn[1]; 
      foreach (Table tb in db.Tables) 
      { 
       smoObjects[0] = tb.Urn; 
       if (tb.IsSystemObject == false) 
       { 
        System.Collections.Specialized.StringCollection sc; 
        sc = scrp.Script(smoObjects); 
        foreach (string st in sc) 
         Console.WriteLine(st); 
       } 
      } 
      Console.ReadKey(); 
     } 
    } 
} 
+0

Это является удивительным. Ты спас мне стопку времени. Спасибо! – David

+0

эпос. Мне нужно было динамически создавать эти вещи, это спасет меня ТОН времени. Большое спасибо! –