前言
当我们需要将生产环境的 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;
生成脚本
遍历指定数据库实例的表、视图和存储过程,使用EnumScript
和Script
方法对其生成 SQL 脚本。
这里演示导出Users
表:
var tables = database.Tables.Cast<Table>().Where(p=>p.Name == "Users");
foreach (var table in tables)
{
table.EnumScript(options);
}
结论
多亏了SMO,我们可以使用 C# 代码轻松生成 SQL 脚本。