使用 SSIS 部署和备份存储过程

Stored Procedure Deployment and Backup Using SSIS

我正在尝试为我们的项目创建用于存储过程部署和备份的 SSIS 包。

我有一些 .sql 文件,每个文件包含一个存储过程定义,文件名就是存储过程名称本身。 我正在尝试使用 SSIS

执行以下操作
  1. 一一读取所有文件名
  2. 如果数据库中存在,则查找每个存储过程的定义
  3. 如果存在,则将同名定义保存在不同的文件夹中(在我的例子中是 ROLLBACK 文件夹)
  4. 对于所有新 SP,它使用 DROP STORED PROCEDURE 命令保存在名为 DropNewSp.sql 的同一文件中。
  5. 完成备份过程后,执行目标数据库中的所有文件。

我能够生成所需的 .sql 文件,但我面临以下问题 1. 该软件包还为所有新存储过程生成了不需要的空白 .sql 文件 2.如果存储过程对后续存储过程有一定依赖,则执行过程失败

在这个回答中,我将提供主要步骤和一些参考,以获取有关如何实现每个步骤的更多信息。即使我同意上面提到的评论,这不是SSIS的工作。

  1. 添加一个遍历 .sql 文件的 foreach 循环容器,并将文件名存储在变量中:

  2. 将表达式任务添加到 retrieve the file name from the File Full Path (variable)

    @{User::FileNameWithoutExtension] = SUBSTRING (@[User::FullFilePath], LEN( @[User::FullFilePath] ) - FINDSTRING( REVERSE( @[User::FullFilePath] ), "\", 1) + 2,  LEN (RIGHT( @[User::FullFilePath], FINDSTRING( REVERSE( @[User::FullFilePath] ), "\", 1 ) - 1 ) ) - FINDSTRING( REVERSE( @[User::FullFilePath] ), ".", 1 )  )
    
  3. 在 foreach 循环容器中添加一个 Execute SQL 任务来检查是否在数据库中找到存储过程:

    SELECT COUNT(*) FROM sys.objects WHERE type = 'P' AND name = ?)
    
  4. 使用优先级constraints with expressions add 2 paths from the execute sql task

    • 第一次使用表达式@[User::Count] == 0
    • 第二个使用表达式@[User::Count] > 0

其他参考资料:

并使用结果集将结果存储在变量中。

  1. 添加一个Script Task to write the procedure definition into the destination file

  2. 在第一条路径上添加 File system task to move the file into the directory specified

  3. 添加另一个foreach循环来读取新文件并执行内容。