SMOを使用すると、パフォーマンスの大きな問題が発生します。すべてのデータベースオブジェクト(関数、ユーザー、ロール、テーブルなど)をスクリプト化し、テーブルを除くすべてのデータベースオブジェクトをスクリプト化すると、2分もかかりませんが、テーブルスクリプトを有効にすると2時間かかりますか?したがって、次を使用してすべてのテーブルプロパティをロードします。
serverSQL.SetDefaultInitFields(typeof(SMO.Table), true);
SMOのパフォーマンスを向上させるためですが、効果がないようです。ここに私のコード:
public static string dumpTables(SMO.TableCollection tables)
{
int cpt = 0;
SMO.ScriptingOptions scriptingOptions = new SMO.ScriptingOptions();
StringBuilder sb = new StringBuilder();
scriptingOptions.IncludeIfNotExists = true;
scriptingOptions.DriAll = true;
scriptingOptions.ExtendedProperties = true;
foreach (SMO.Table table in tables)
{
sb.Append("-- Table " + table.Name + "\n");
foreach (string scriptline in table.Script(scriptingOptions)) //Script call take a long time
{
sb.Append(scriptline + Environment.NewLine );
}
sb.Append("GO" + Environment.NewLine);
cpt++;
Console.WriteLine(string.Format("Table {0} : {1}", cpt.ToString(), table.ToString()));
}
return sb.ToString();
}
最後の問題は、SQLスクリプトを使用してテーブルスクリプトを直接作成することですが、SSMSを使用すると、数分でテーブルスクリプトを作成できます(SSMSスクリプトウィザードはSMOまたはSQLスクリプトを使用しますか?) 。