我正在使用一个小工具,可以让您生成现有数据库的SQL脚本。生成的脚本没有任何问题,但是当通过在SQL Server Management Studio中执行脚本来测试脚本时,出现错误,指出我的一个表的对象名称无效。
所以我手动生成了脚本,唯一的区别是脚本的开始。我的工具创建的脚本包含use ClientND
行,而手动创建的脚本包含use master
。
因此,我认为这是错误的根源,因此我尝试在ScriptingOptions中找到适当的选项,但无济于事。
是否有一种方法可以包含use master
而不是use dbName
?
代码:
public void GenerateSQLScripts(string dbName)
{
StringBuilder sb = new StringBuilder();
Server server = new Server(SqlServer);
Database db = server.Databases[dbName];
var scriptopt = new ScriptingOptions();
scriptopt.TargetServerVersion = SqlServerVersion.Version105; // Windows 2008 R2
scriptopt.AnsiPadding = true;
scriptopt.WithDependencies = true;
scriptopt.IncludeHeaders = true;
scriptopt.SchemaQualify = true;
scriptopt.ExtendedProperties = true;
scriptopt.TargetDatabaseEngineType = DatabaseEngineType.Standalone;
scriptopt.IncludeDatabaseContext = true;
scriptopt.ScriptDrops = false;
scriptopt.ScriptData = false;
scriptopt.ScriptSchema = true;
scriptopt.DriAllConstraints = true;
scriptopt.DriForeignKeys = true;
scriptopt.Indexes = true;
scriptopt.DriPrimaryKey = true;
scriptopt.DriUniqueKeys = true;
scriptopt.DriChecks = true;
scriptopt.AllowSystemObjects = false;
scriptopt.AppendToFile = false;
// script Tables
foreach (Table t in db.Tables)
{
StringCollection sc = t.Script(scriptopt);
foreach (string s in sc)
{
sb.AppendLine(s);
}
}
File.WriteAllText(path, sb.ToString());
}