4

私はSQLServerSmoを使用して、C#アプリケーションによるデータベースのスキームを作成しています。ただし、もう少し必要です。また、次のようなスクリプトとして各テーブルからデータを取得する必要があります。

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

どうすればそれができますか?それは可能ですか?データベースなどの*.bakではなく、smoを使用してスクリプトを正確に作成する必要があることに注意してください。

4

1 に答える 1

25

SMOのScripterクラスをご覧ください。次の基本的なサンプルは私のために働きます:

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

注:この例では、外部キーの制約やテーブル間のその他の依存関係は処理されません。

参照:

  1. このSOの質問(それは私をScripterクラスに変えました)
  2. このMSDNフォーラムの質問( EnumScriptメソッドの使用方法を説明しています)
于 2012-11-05T16:40:26.463 に答える