我正在尝试为我们的项目创建用于存储过程部署和备份的SSIS包。 我有一些.sql文件,每个文件包含一个存储过程定义,并且文件名是存储过程名称本身。 我正在尝试通过使用SSIS执行以下操作
我能够生成所需的.sql文件,但是我面临以下问题 1.软件包还为所有新存储过程生成了不需要的空白.sql文件 2.如果存储过程对后续存储过程
有某种依赖性,则执行过程失败任何建议或指导将不胜感激.. !!
答案 0 :(得分:1)
在此答案中,我将为主要步骤提供一些参考,以获取有关如何实现每个步骤的更多信息。即使我同意上述评论,这也不是SSIS的工作。
添加一个foreach循环容器,该容器循环遍历.sql文件并将文件名存储在变量中:
将表达式任务添加到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 ) )
在foreach循环容器内添加一个执行SQL任务,以检查是否在数据库中找到了存储过程:
SELECT COUNT(*) FROM sys.objects WHERE type = 'P' AND name = ?)
将过程名称作为参数传递给execute sql任务:
使用结果集将计数结果存储在整数类型的变量中:
使用优先级constraints with expressions add 2 paths from the execute sql task
@[User::Count] == 0
@[User::Count] > 0
其他参考文献:
Defining Workflow in SSIS using Precedence Constraints
在第二条路径上,添加执行SQL任务以使用与上述相同的方法来获取过程定义:
SELECT OBJECT_DEFINITION (OBJECT_ID(N'<databasename>.<schemaname>.' + CAST(? as VARCHAR(100))));
然后使用结果集将结果存储在变量中。
添加一个Script Task to write the procedure definition into the destination file
在第一个路径上添加一个File system task
to move the file into the directory specified
添加另一个foreach循环以读取新文件并执行内容。