在这篇文章中,我们将学习如何复制在SQL Server主数据库中创建的用户存储过程。
演示设置
为了演示,我在Nisarg-PC\SQL01的主数据库上执行了Ola-hallengren数据库维护脚本。你可以下载最新版本的维护脚本。这些脚本创建了一些存储过程和表。脚本执行成功后,你可以通过执行以下查询来查看它们。
Select name as [Procedure Name] from master.sys.procedures

我们将把上述存储过程迁移到Nisarg-PC\SQL02服务器的主数据库中。
创建集成服务包
现在,首先,让我们创建一个集成服务包。打开SSDT 2017 🡪 点击 Crete New Project 🡪 选择 Integration services 项目。项目的名称将是迁移主数据库存储过程。
拖动转移主数据库存储过程任务并将其放在控制流表面,将其重命名为迁移维护存储过程。
双击转移主数据库存储过程任务来配置它。
为了在实例之间转移存储过程,我们必须配置源和目标连接。要做到这一点,点击SourceConnection并选择New Connection。首先,让我们看看我们如何配置源连接。
配置SourceConnection
要配置与源服务器的连接,请点击SourceConnection并选择新连接。
在SMO连接管理器编辑器对话框中,指定源服务器的名称,并指定用于连接到SQL服务器的认证方法。在我们的演示中,服务器名称是Nisarg-PC\SQL01,认证方法是Windows认证。

单击 "确定"以保存连接属性并关闭对话框。
配置DestinationConnection
要配置目标服务器的连接,点击DestinationConnection并选择New connection。
在SMO连接管理器编辑器对话框中,指定源的服务器名称,并指定用于连接到SQL服务器的认证方法。在我们的演示中,服务器名称是Nisarg-PC\SQL02,认证方法是Windows认证。

单击 "**确定 "**保存连接属性并关闭对话框。连接部分看起来像下面这样。

在存储过程部分,你可以得到以下选项。
- IfObjectExists:当我们要转移的对象已经存在时,你可以选择由Transfer Master存储过程任务执行的以下任何一项操作
- FailTask:如果存储过程在目标实例上存在,工作将失败。
- 覆盖:如果存储过程存在于目标服务器上,该任务将覆盖现有的存储过程。
- 跳过:如果存储过程在目标服务器上存在,该任务将跳过该特定存储过程的转移。
- TransferAllStoredProcedures:如果你想转移所有用户定义的存储过程,请选择True。如果你想转移特定的存储过程,选择 "假"。
- 存储过程列表:如果你想转移特定的存储过程,你可以选择你要转移的SP。当你为TransferAllStoredProcedures参数选择False值时,该选项启用
我们想跳过我们演示中的现有存储过程的转移,所以选择跳过。我们想转移所有的存储过程,所以在TransferAllStoredProcedures选项中选择True。

转移主存储过程任务编辑器看起来像下面的图片。
现在,当存储过程被转移时,我们应该得到通知。要做到这一点,我们将配置通知操作员任务。
配置通知操作员任务
首先,拖动通知操作员任务,把它放到控制流表面,把它重命名为发送电子邮件,然后双击它。
首先,我们必须配置已创建操作员的服务器之间的连接。要做到这一点,点击通知操作员任务对话框中的新建。另一个对话框 "连接属性 "就会打开。指定以下参数的适当值。
- 连接名称。指定所需的连接名称。在我们的演示中,我将其命名为SQLConnection。
- 服务器名称。指定创建SQL Server操作员的服务器名称。我已经在Nisarg-PC/SQL01中创建了一个名为DBASupport的操作员。
- 认证方法。指定认证方法。在我们的演示中,我使用了windows认证
点击 "确定",关闭对话框。

在通知信息主题文本框中指定电子邮件主题。在我们的演示中,主题行是 主数据库存储过程的迁移状态。
在通知信息正文中指定电子邮件正文。在我们的演示中,邮件正文如下。
Hello DBASupport,
The stored procedure of the master database has been transferred successfully.
最后,通知操作员任务看起来像下面的图片。

这封邮件必须在所有工作都迁移成功后发送。要做到这一点,我们必须使用连接器连接这两个任务。这个包看起来如下图所示。
Transfer Master Stored Procedures任务已经配置成功。
总结
在本系列的第二篇文章中,我们了解了转移主存储过程任务。我已经解释了我们如何配置它,以便使用SQL Server数据工具(SSDT 2017)在SQL Server的两个实例之间传输在主数据库中创建的用户存储过程。






