2012-11-05 23 views
5

Używam Sql Server Smo do tworzenia schematu bazy danych przez aplikację C#. Jednak muszę trochę więcej, ja też trzeba uzyskać danych z każdej tabeli jako skryptu jak poniżej:Uzyskaj dane serwera Sql za pomocą smo

--........................................ 
INSERT INTO Table123 (...) VALUES (....) 
INSERT INTO Table456 (...) VALUES (....) 
--........................................ 

Jak mogę to zrobić i czy jest to możliwe? Proszę zauważyć, że muszę utworzyć dokładnie skrypt za pomocą smo i nie * .bak bazy danych, itp.

+0

Dlaczego najpierw nie używając kodu Entity Framework podejście instate z 'smo'? Tworzy również schemat bazy danych. możesz także generować skrypty sql dla wstawiania/aktualizacji/usuwania ręcznie. sprawdź [ten link] (http://www.codeproject.com/Articles/14528/Generate-SQL-INSERT- programami) – Jalal

+1

SQL Server, o ile mi wiadomo, nie ma możliwości zrzucania jego danych forma skryptu 'INSERT'. Możesz użyć BCP do produkcji np. Pliki CSV i plik formatu, ale nie pasuje do formatu, o który prosisz. –

+0

Jeśli budujesz schemat, dlaczego nie możesz po prostu zbudować tego skryptu jako tekstu. – Paparazzi

Odpowiedz

24

Zobacz klasę SMO Scripter. Poniższy przykładowy podstawowy działa dla mnie:

using System.Data.SqlClient; 
using System.IO; 
using System.Text; 
using Microsoft.SqlServer.Management.Common; 
using Microsoft.SqlServer.Management.Smo; 

namespace SqlExporter 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 
    var server = new Server(new ServerConnection {ConnectionString = new SqlConnectionStringBuilder {DataSource = @"LOCALHOST\SQLEXPRESS", IntegratedSecurity = true}.ToString()}); 
    server.ConnectionContext.Connect(); 
    var database = server.Databases["MyDatabase"]; 
    var output = new StringBuilder(); 

    foreach (Table table in database.Tables) 
    { 
     var scripter = new Scripter(server) {Options = {ScriptData = true}}; 
     var script = scripter.EnumScript(new SqlSmoObject[] {table}); 
     foreach (var line in script) 
      output.AppendLine(line); 
    } 
    File.WriteAllText(@"D:\MyDatabase.sql", output.ToString()); 
} 
} 
} 

Uwaga: Ten przykład nie obsługuje żadnych ograniczeń klucza obcego lub innych zależności między tabelami.

Referencje:

  1. This SO question (który zwrócił mi na klasy Scripter)
  2. This MSDN forum question (który wyjaśnia, jak korzystać z metody EnumScript)
+0

Czy istnieje sposób skryptowania tylko części danych tabeli? (Wyrażając warunek, gdzie) – thestral

+0

Próbuję również to zrobić, tj. Wyrażając warunek gdzie, czy ktoś wie, czy jest to możliwe z SMO? – Alicia

Powiązane problemy