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());
}
}
}
注:この例では、外部キーの制約やテーブル間のその他の依存関係は処理されません。
参照:
- このSOの質問(それは私をScripterクラスに変えました)
- このMSDNフォーラムの質問( EnumScriptメソッドの使用方法を説明しています)