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

时间:2019-03-20 09:47:10

标签: sql-server stored-procedures ssis etl msbi

我正在尝试为我们的项目创建用于存储过程部署和备份的SSIS包。 我有一些.sql文件,每个文件包含一个存储过程定义,并且文件名是存储过程名称本身。 我正在尝试通过使用SSIS执行以下操作

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

我能够生成所需的.sql文件,但是我面临以下问题 1.软件包还为所有新存储过程生成了不需要的空白.sql文件 2.如果存储过程对后续存储过程

有某种依赖性,则执行过程失败

任何建议或指导将不胜感激.. !!

1 个答案:

答案 0 :(得分:1)

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

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

  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循环容器内添加一个执行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循环以读取新文件并执行内容。