C#使用SMO生成SQL Server数据导出脚本

前言

当我们需要将生产环境的 SQL Server 数据导出时,可能由于一些限制,比如端口禁止远程访问,无法使用客户端连接操作。

这时,可以使用 C# 以编程的方式帮我们生成数据导入脚本。.

SMO

SQL Server SMO 对象是专为以编程方式管理而设计的 Microsoft SQL Server 对象。

SMO 包括两大类别:

  • 实例类,用于表示 SQL Server 对象,比如服务器、数据库、表、触发器和存储过程。

  • 实用工具类,为执行特定任务而显式创建的一组对象,比如用于向其他数据库传输架构和数据的传输类。

要使用 SMO,需要在项目中引用 Nuget 包Microsoft.SqlServer.SqlManagementObjects

这里我们主要演示实例类的使用。

Demo

连接数据库

根据数据库连接字符串创建Server实例类并指定数据库实例:

var server = new Server(new ServerConnection(new SqlConnection(connectionString)));
var database = server.Databases[databaseName];

设置传输脚本选项

设置脚本存储的位置以及需要导出数据(ScriptData):

var options = new ScriptingOptions();
options.FileName = "backup.sql";
options.EnforceScriptingOptions = true;
options.WithDependencies = true;
options.IncludeHeaders = true;
options.ScriptDrops = false;
options.AppendToFile = true;
options.ScriptSchema = true;
options.ScriptData = true;
options.Indexes = true;

生成脚本

遍历指定数据库实例的表、视图和存储过程,使用EnumScriptScript方法对其生成 SQL 脚本。

这里演示导出Users表:

var tables = database.Tables.Cast<Table>().Where(p=>p.Name == "Users");
foreach (var table in tables)
{
    table.EnumScript(options);
}

结论

多亏了SMO,我们可以使用 C# 代码轻松生成 SQL 脚本。