如何自动化与SSIS包存储过程的执行

 我来答
huanglenzhi
推荐于2016-07-16 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517171
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  下面是这样的一种方式。在SSIS 2008 R2和SQL Server 2012的后端。 创建一个表来存储你的价值观。比方说,该表是dbo.SProcValues。基于存储的定义,表架构是这样的。
  CREATE TABLE dbo.SProcValues(
  Id int IDENTITY(1,1) NOT NULL,
  SProcName nvarchar(40) NOT NULL,
  SchemaName nvarchar(20) NOT NULL,
  Dimension nvarchar(40) NOT NULL,
  ETLSchema nvarchar(20) NOT NULL,
  ETLTable nvarchar(40) NOT NULL,
  IsExecute bit NOT NULL
  )
  GO

  让我们来插入示例下面的脚本。
  INSERT INTO dbo.SProcValues
  (SProcName, SchemaName, Dimension, ETLSchema, ETLTable, IsExecute) VALUES
  ('dbo.sp_generate_merge', 'dim1', 'dimension1', 'stg1', 'table1', 1),
  ('dbo.sp_generate_merge_scdbk', 'dim2', 'dimension2', 'stg2', 'table2', 1),
  ('dbo.sp_generate_merge_scdbk', 'dim3', 'dimension3', 'stg3', 'table3', 0),
  ('dbo.sp_generate_merge', 'dim4', 'dimension4', 'stg4', 'table4', 0);
  GO

  在SSIS包,假设你有数据源和已建立的连接管理器。创建以下变量。可变SProcValues将容纳存储在表中的设置。可变SQLInnerQuery将举行,这将在后面的内部执行SQL任务查询。其他变量涉及到每一列可在表格中我们可以通过每一行循环,并保持在一个变量。 在变量的值粘贴以下查询SELECT SProcName, SchemaName, Dimension, ETLSchema, ETLTable, IsExecute FROM dbo.SProcValues选择变量SQLInnerQuery,然后按F4以查看属性。设置该属性EvaluateAsExpression为True,然后单击省略号按钮对Expression属性。 我们需要设置,将评估对存储在EXEC可在以后提供给内部执行SQL任务的表达式。设置以下表达式。"EXEC " + @[User::SProcName] + " @Schema = ?, @Dimension = ?, @ETLSchema = ?, @ETLTable = ?, @IsExecute = ?"如果单击评估的编辑器表达式按钮,你可以看到什么样的表达式会。您还会注意到,没有存储在下面的截图就是包变量目前没有任何价值。在将与表中的值,该表达式被分配会自动自行解决。 在SSIS包,拖放一个执行SQL任务。此任务将运行下面的查询来获取存储在表中dbo.SProcValues值的列表。在执行SQL任务配置常规页面,如下图所示。该OLEDB连接和连接管理器/数据源是作为实践。 配置执行SQL任务的结果集页面,结果从查询中设置保存为一个对象变量。 现在,第一个执行SQL任务配置得到应传递到存储的值的列表中,您需要通过记录循环。 拖放一个Foreach循环容器。执行SQL任务的优先级容器连接到Foreach循环容器。配置Foreach循环容器的集合页面。我们通过循环的结果将ADO 在Foreach循环容器配置变量映射页面,如下图所示。当我们中的每一行循环,我们将存储在各自的变量中的列值,所以我们可以把它传递给下一个执行SQL任务来运行存储 拖放一个执行SQL任务Foreach循环容器内,使这个任务是在结果集中每次执行我们遍历一行。配置执行SQL任务,如下图所示。 注 您可能希望在这问题上,根据你的如果你选择的ResultSet,那么你需要配置一个合适的对象变量来接受这个结果集执行SQL任务配置的ResultSet属性。我把它作为无这个例子。 设定值被传递给存储 最后,控制流程是这样的。 当包运行时,循环将执行存储尽可能多的记录由上述的SELECT返回的,前提是你把所有表中的行存储的定义,可在数据库中。我已经创建的存储dbo.sp_generate_merge_scdbk和dbo.sp_generate_merge同的定义。这就是包执行的理由
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式