Я работаю над небольшим инструментом, который позволяет генерировать сценарий 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());
}