C#:从包含“使用主”的数据库生成SQL脚本

时间:2018-07-05 13:05:30

标签: c# sql-server smo

我正在使用一个小工具,可以让您生成现有数据库的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());
}

0 个答案:

没有答案