51CTO技术论坛_中国领先的IT技术社区's Archiver

嚣张不了 发表于 2007-9-5 00:12

SSIS foreach容器事务选项设置为Required,事务的问题

SSIS foreach容器事务选项设置为Required,这样的设置是表示所有的循环都作为一个整个的事务,还是每次循环在foreach容器内部的所有步骤是一个事务?

yangfanlengdie 发表于 2007-9-6 00:14

所有 Microsoft SQL Server 2005 Integration Services (SSIS) 容器类型(包、For 循环、Foreach 循环和序列容器以及封装每个任务的任务宿主)都可以配置为使用事务。Integration Services 提供了三个用于配置事务的选项:NotSupported、Supported 和 Required。
Required 指示该容器启动一个事务,除非已经存在由其父容器启动的事务。如果事务已经存在,容器将联接该事务。例如,如果没有配置为支持事务的包包括一个使用 Required 选项的序列容器,则该序列容器会启动其自己的事务。如果包已经配置为使用 Required 选项,则序列容器将联接包事务。
Supported 指示容器不启动事务,但将联接由其父容器启动的任何事务。例如,如果具有四个执行 SQL 任务的包启动了一个事务,而且所有这四个任务都使用 Supported 选项,则在其中任何一个任务失败时都会回滚执行 SQL 任务所执行的数据库更新。如果包没有启动事务,则四个执行 SQL 任务将不绑定到该事务,而且除了回滚失败的任务所执行的更新外,不回滚任何其他数据库更新。
NotSupported 指示容器不启动事务,也不联接现有事务。由父容器启动的事务不影响已经配置为不支持事务的子容器。例如,如果包配置为启动事务,而包中的 For 循环容器使用 NotSupported 选项,则在 For 循环中的任务失败时不回滚任何任务。
通过设置容器的 TransactionOption 属性,您可以配置事务。可以使用 Business Intelligence Development Studio 中的“属性”窗口设置此属性,也可以以编程方式设置此属性。

redking 发表于 2007-9-6 11:16

SQL Server 2005 联机丛书
Foreach 循环容器

Foreach 循环容器定义包中的重复控制流。循环的实现与编程语言中的 Foreach 循环结构类似。在包中,通过使用 Foreach 枚举器启用循环。Foreach 循环容器将重复指定枚举器的每个成员的控制流。

SQL Server 2005 Integration Services (SSIS) 提供了下列枚举器类型:

Foreach ADO 枚举器,用于枚举表中的行。例如,可以获取 ADO 记录集中的行。

Foreach ADO.NET 架构行集枚举器,用于枚举有关数据源的架构信息。例如,可枚举并获取一组 AdventureWorks SQL Server 数据库中的表。

Foreach 文件枚举器,用于枚举文件夹中的文件。该枚举器可遍历子文件夹。例如,可读取 Windows 文件夹及其子文件夹中所有具有 *.log 文件扩展名的文件。

Foreach 源变量枚举器,用于枚举指定变量包含的可枚举对象。可枚举对象可以是数组、ADO.NET DataTable 和 Integration Services 枚举器等。例如,可以枚举包含服务器名称的数组中的值。

Foreach 项枚举器,用于枚举集合项。例如,可以枚举执行进程任务所使用的可执行文件和工作目录的名称。

Foreach Nodelist 枚举器,用于枚举 XML Path 语言 (XPath) 表达式的结果集。例如,此表达式可枚举并获取古代的所有作者:/authors/author[@period='classical']。

Foreach SMO 枚举器,用于枚举 SQL Server 管理对象 (SMO) 对象。例如,可枚举并获取 SQL Server 数据库中的视图列表。

以下关系图显示了一个具有文件系统任务的 Foreach 循环容器。该 Foreach 循环使用了 Foreach 文件枚举器,并将文件系统任务配置为复制文件。如果枚举器指定的文件夹包含四个文件,则循环将重复四次,复制四个文件。


可以使用变量和属性表达式的组合,用枚举器集合值更新包对象的属性。首先,将集合值映射到用户定义变量;然后,对使用该变量的属性执行一个属性表达式。例如,将 Foreach 文件枚举器的集合值映射到名为 MyFile 的变量,然后在发送邮件任务的 Subject 属性的属性表达式中使用该变量。如果运行该包,则每次重复循环时,都会用一个文件名更新 Subject 属性。有关详细信息,请参阅在包中使用属性表达式。

映射到枚举器集合值的变量也可用于表达式和脚本。

Foreach 循环容器可以包含多个任务和容器,但只能使用一种类型的枚举器。如果 Foreach 循环容器包含多个任务,则可将枚举器集合值映射到每个任务的多个属性。

可以设置 Foreach 循环容器的事务属性,从而为包控制流的子集定义事务。通过这种方式,可以在 Foreach 循环级别而不是包级别管理事务。例如,如果 Foreach 循环容器重复了星形架构中的维度表和事实数据表的更新控制流,则可以配置事务以确保成功更新所有事实数据表,或者不更新任何事实数据表。有关详细信息,请参阅在包中合并事务。

枚举器类型

枚举器可以配置,您必须为不同的枚举器提供不同的信息。

下表汇总了每种枚举器类型需要的信息。

枚举器  配置要求  
Foreach ADO
指定 ADO 对象源变量和枚举器模式。

Foreach ADO.NET 架构行集
指定与数据库的连接和要枚举的架构。

Foreach 文件
指定要枚举的文件夹和文件、检索到的文件的文件名格式,以及是否要遍历子文件夹。

Foreach 源变量
指定包含要枚举的对象的变量。

Foreach 项
定义 Foreach 项集合中的项,包括列和列数据类型。

Foreach Nodelist
指定 XML 文档的源并配置 XPath 操作。

Foreach SMO
指定与数据库的连接以及要枚举的 SMO 对象。


在 Foreach 循环容器中使用属性表达式

可以将包配置为并发运行多个可执行文件。如果包中包含实现属性表达式的 Foreach 循环容器,则应当小心使用此配置。

通常需要实现属性表达式以便设置 Foreach 循环枚举器所使用的连接管理器的 ConnectionString 属性的值。ConnectionString 的属性表达式是由映射到枚举器的集合值的变量来设置的,并在每个循环迭代中被更新。

若要避免在循环中并行执行任务时遇到不可确定的定时导致的负数结果,应当将包配置为每次只运行一个可执行文件。例如,如果包可以并发运行多个任务,那么当一个 Foreach 循环容器枚举文件夹中的文件,然后检索文件名,然后使用执行 SQL 任务将文件名插入表中时,如果在两个执行 SQL 任务实例都试图同时写入,就有可能导致写入冲突。有关详细信息,请参阅在包中使用属性表达式。

配置 Foreach 循环容器

可以通过 SSIS 设计器或以编程方式来设置属性。

有关可以在 SSIS 设计器中设置的属性的详细信息,请单击下列主题之一:

Foreach 循环编辑器(“常规”页)

Foreach 循环编辑器(“集合”页)

Foreach 循环编辑器(“变量映射”页)

“表达式”页

有关在 SSIS 设计器中如何设置这些属性的详细信息,请单击以下主题之一:

如何配置 Foreach 循环容器

如何设置容器属性

以编程方式配置 Foreach 循环容器
有关以编程方式设置这些属性的详细信息,请单击以下主题:

ForEachLoop

请参阅

概念
创建包控制流
Integration Services 容器


帮助和信息
获取 SQL Server 2005 帮助
更改历史记录

发布日期  历史记录  
2005 年 12 月 5 日
新增内容:
添加了有关在 Foreach 循环中使用变量和属性表达式的信息。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.