使用 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脚本?)谢谢给我一个修复它的问题.