循环执行 SQL 语句包示例

在循环中执行 SQL 语句示例包将使用 Foreach 循环容器遍历保存在文件夹中的文本文件中的 SQL 语句。Transact-SQL 语句将在 AdventureWorks 数据库中创建五个表,每一个表对应一个美国的有效销售区域。Foreach 文件枚举器的集合值将映射为变量。该变量将用于属性表达式,以使用每个枚举更新文件连接管理器中的连接字符串的值。

文本文件中的数据有一些问题:某些邮政编码不能正确地解释为数值,因此丢失前导零,并且某些销售区域的标识符无效。包中的数据流将检测并更正不正确的邮政编码,将具有无效销售区域的数据行写入文件,并将有效数据行定向到 AdventureWorks 数据库中的五个表之一。

当重新运行包时,表将在插入数据之前被截断。

如果在非英语版本的 Windows 上运行该示例,则可能需要替换 Program Files 文件夹的本地化名称,才能打开或运行该示例。

ms160815.note(zh-cn,SQL.90).gif重要提示:
提供的示例仅供学习使用。这些示例不是针对生产环境设计的,也没有在生产环境中进行测试。对于这些示例,Microsoft 不提供相关的技术支持。

要求

在运行该示例包之前,请确保满足以下条件:

  • 示例数据包及其使用的数据文件必须安装在本地硬盘驱动器上。
  • 您必须安装了 AdventureWorks 数据库并对其具有管理权限。
  • 如果仅需要从命令行运行示例包,则必须安装 SQL Server 2005 Integration Services (SSIS)。
  • 若要在 SSIS 设计器中打开包并运行示例包,则必须安装 Business Intelligence Development Studio。

有关如何安装示例的详细信息,请参阅 SQL Server 2005 联机丛书中的“Installing Sample Integration Services Packages”主题。若要获取示例的最新版本,包括在最初发布 SQL Server 2005 之后发布的新示例,请参阅 SQL Server 2005 示例和示例数据库(2006 年 4 月)

示例包的位置

如果示例安装到默认安装位置,执行 SQL 语句示例包将位于以下文件夹:

c:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\

运行此示例包需要下列文件:

文件 说明

ExecuteSQLStatementsInLoop.dtsx

包文件。

Customer.txt

源数据文件。

CustomersWithInvalidTerritoryID.txt

写入无效数据的文件。

CreateProspectTableTerr1.sql

创建 Territory1 表的 Transact-SQL 语句。

CreateProspectTableTerr2.sql

创建 Territory2 表的 Transact-SQL 语句。

CreateProspectTableTerr3.sql

创建 Territory3 表的 Transact-SQL 语句。

CreateProspectTableTerr4.sql

创建 Territory4 表的 Transact-SQL 语句。

CreateProspectTableTerr5.sql

创建 Territory5 表的 Transact-SQL 语句。

运行示例

可以使用 dtexec 实用工具从命令行运行包,或在 Business Intelligence Development Studio 中运行包。

如果您使用的是非英语版本的 Windows,则可能需要更新包中使用的所有文件连接管理器的 ConnectionString 属性,才能成功地运行示例包。您应验证计算机上连接管理器所用的路径是否为有效路径。如果需要,可以修改此路径以便使用 Program Files 文件夹的本地化名称。

对于此示例,可能必须更新 CreateTableSQL、Customers 和 CustomersWithInvalidTerritoryID 连接管理器的 ConnectionString 属性中的“Program Files”。

使用 dtexec 运行包

  1. 打开命令提示符窗口。

  2. 使用**“更改目录”**命令 cd 将目录更改为 C:\Program Files\Microsoft SQL Server\90\DTS\Binn,即 dtexec 所在的位置。

  3. 键入下列命令:

    dtexec /f "C:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\ExecuteSQLStatementsInLoop.dtsx"
    
  4. Enter

有关如何使用 dtexec 实用工具运行包的详细信息,请参阅 SQL Server 2005 联机丛书中的“dtexec 实用工具”主题。

在 Business Intelligence Development Studio 中运行包

  1. 打开 Business Intelligence Development Studio。

  2. 在**“文件”菜单上,指向“打开”,再单击“项目/解决方案”**。

  3. 定位到 ExecuteSQLStatementsInLoop 示例文件夹,然后双击名为 ExecuteSQLStatementsInLoop.sln 的文件。

  4. 解决方案资源管理器中,右键单击 SSIS Packages 文件夹中的 ExecuteSQLStatementsInLoop.dtsx,然后单击**“执行包”**。

ms160815.note(zh-cn,SQL.90).gif重要提示:
如果在第一次运行在循环中执行 SQL 语句示例包之前在 SSIS 设计器中打开该包,数据流任务将显示一条警告。出现警告是因为包使用的 SQL Server 表不存在,这些表是在第一次运行包时创建的。运行包至少一次之后,在 SSIS 设计器中重新打开包时,将不会显示该警告。包将成功运行,无论是否显示警告。

示例中的组件

下表列出了用于示例的 Integration Services 任务、容器、源、转换、目标和连接管理器。

元素 用途

Foreach 循环

Foreach 循环容器 (Run SQL Statements) 使用 Foreach 文件枚举器遍历包含 Transact-SQL 语句的文件。Foreach 循环容器包括执行 SQL 任务。

执行 SQL 任务

执行 SQL 任务 (Create Tables) 将连接到 AdventureWorks 数据库并运行创建表的五个 Transact-SQL 语句。

数据流任务

数据流任务 (Extract-Clean-Load Data) 将执行这样的数据流:从文本文件提取数据,清除和分发数据,然后将数据加载到 AdventureWorks 数据库的表中。

平面文件源

平面文件源 (Extract data) 将从文本文件提取数据。

条件性拆分转换

条件性拆分转换(根据 TerritoryID 定向行)将根据 TerritoryID 列中的值将行定向到不同输出。TerritoryID 中具有无效值的行将被定向到默认输出。

派生列转换

派生列转换(固定邮政编码)将通过向四个字符组成的邮政编码添加前导零来清除邮政编码。

OLE DB 目标

五个 OLE DB 目标将数据加载到五个不同的区域表。

文件连接管理器

文件连接管理器(创建表 SQL)将连接到包含 SQL CREATE TABLE 语句的文件。

平面文件连接管理器

文件连接管理器(客户)将连接到包含客户源数据的文本文件。

文件连接管理器(CustomsWithInvalidTerritoryId)将连接到包写入无效数据的文本文件。

OLE DB 连接管理器

OLE DB 连接管理器 (local).AdventureWorks,连接到本地服务器上的 AdventureWorks 数据库。

示例结果

若要查看在循环中执行 SQL 语句示例包的执行结果,请打开 SQL Server Management Studio 中的“查询”窗口,键入或复制以下 Transact-SQL 查询,然后运行查询。

SELECT * FROM AdventureWorks.dbo.Territory1
SELECT * FROM AdventureWorks.dbo.Territory2
SELECT * FROM AdventureWorks.dbo.Territory3
SELECT * FROM AdventureWorks.dbo.Territory4
SELECT * FROM AdventureWorks.dbo.Territory5

该查询将检索从文本文件中提取并加载到 SQL Server 表中的数据。