Skip to content

Instantly share code, notes, and snippets.

@Vincent-233
Last active November 22, 2024 13:36
Show Gist options
  • Save Vincent-233/8af3c027a4fd28a676085e798a89de8a to your computer and use it in GitHub Desktop.
Save Vincent-233/8af3c027a4fd28a676085e798a89de8a to your computer and use it in GitHub Desktop.
Code-Snippet-Index

在 SMO 中,您可以设置脚本选项,以控制生成的 SQL 脚本的格式和内容。这些选项包括选择是否脚本化约束、数据类型、对象权限等。您可以使用 ScriptingOptions 类来指定这些选项。

以下是如何在上面的示例中添加脚本选项的例子:

using System; using System.IO; using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Smo;

class Program { static void Main(string[] args) { // 定义 SQL Server 服务器和数据库信息 string serverName = "localhost"; // 更改为你的服务器名称 string databaseName = "YourDatabase"; // 更改为你的数据库名称 string outputDirectory = "C:\SqlScripts"; // 更改为你希望保存脚本的目录

    // 创建输出目录如果不存在
    if (!Directory.Exists(outputDirectory))
    {
        Directory.CreateDirectory(outputDirectory);
    }

    // 连接到 SQL Server
    ServerConnection conn = new ServerConnection(serverName);
    Server sqlServer = new Server(conn);
    Database database = sqlServer.Databases[databaseName];

    // 设置脚本选项
    ScriptingOptions scriptingOptions = new ScriptingOptions
    {
        IncludeHeaders = true,           // 包含头信息
        IncludeIfNotExists = true,       // 包含 IF NOT EXISTS 语句
        IncludeSchema = true,            // 包含架构
        ScriptData = false,              // 不脚本数据(仅脚本结构)
        ScriptSchema = true,             // 脚本架构(表、视图、存储过程等)
        ScriptDataCompression = false,   // 不压缩数据
        TargetServerVersion = DatabaseEngineType.SqlServer2019 // 目标 SQL Server 版本
        // 可以根据需要添加更多选项
    };

    // 生成表脚本
    foreach (Table table in database.Tables)
    {
        string tableScript = table.Script(scriptingOptions).Text;
        string tableFilePath = Path.Combine(outputDirectory, `$"{table.Name}.sql");
        File.WriteAllText(tableFilePath, tableScript);
        Console.WriteLine($`"Table script saved to: {tableFilePath}");
    }

    // 生成视图脚本
    foreach (View view in database.Views)
    {
        string viewScript = view.Script(scriptingOptions).Text;
        string viewFilePath = Path.Combine(outputDirectory, `$"{view.Name}.sql");
        File.WriteAllText(viewFilePath, viewScript);
        Console.WriteLine($`"View script saved to: {viewFilePath}");
    }

    // 生成存储过程脚本
    foreach (StoredProcedure sp in database.StoredProcedures)
    {
        if (!sp.IsSystemObject)
        {
            string spScript = sp.Script(scriptingOptions).Text;
            string spFilePath = Path.Combine(outputDirectory, `$"{sp.Name}.sql");
            File.WriteAllText(spFilePath, spScript);
            Console.WriteLine($`"Stored Procedure script saved to: {spFilePath}");
        }
    }

    // 关闭 SQL Server 连接
    conn.Disconnect();
}

}

代码中的新内容:

1.	ScriptingOptions:创建一个 ScriptingOptions 实例,该实例用于定义脚本化选项。您可以根据需要设置不同的属性:
•	IncludeHeaders: 包含脚本的头部信息。
•	IncludeIfNotExists: 为对象包含 IF NOT EXISTS 语句。
•	IncludeSchema: 包含对象的模式名。
•	ScriptData: 设置是否包括数据(如果您只需要结构,则应为 false)。
•	ScriptSchema: 设置是否包含对象架构(例如,表和视图的定义)并设置为 true。
•	TargetServerVersion: 设置目标 SQL Server 的版本,可以用 DatabaseEngineType 枚举选择目标版本。
2.	使用脚本选项:更新 table.Script(scriptingOptions).Text,view.Script(scriptingOptions).Text 和 sp.Script(scriptingOptions).Text,以使用定义的脚本选项生成脚本。根据您的具体需求,您可以进一步调整脚本选项。运行该程序后,将根据定义的选项生成对应的 SQL 脚本并保存到文件中。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment