循环执行 SQL 语句包示例
在循环中执行 SQL 语句示例包将使用 Foreach 循环容器遍历保存在文件夹中的文本文件中的 SQL 语句。Transact-SQL 语句将在 AdventureWorks 数据库中创建五个表,每一个表对应一个美国的有效销售区域。Foreach 文件枚举器的集合值将映射为变量。该变量将用于属性表达式,以使用每个枚举更新文件连接管理器中的连接字符串的值。
文本文件中的数据有一些问题:某些邮政编码不能正确地解释为数值,因此丢失前导零,并且某些销售区域的标识符无效。包中的数据流将检测并更正不正确的邮政编码,将具有无效销售区域的数据行写入文件,并将有效数据行定向到 AdventureWorks 数据库中的五个表之一。
当重新运行包时,表将在插入数据之前被截断。
如果在非英语版本的 Windows 上运行该示例,则可能需要替换 Program Files 文件夹的本地化名称,才能打开或运行该示例。
重要提示: |
---|
提供的示例仅供学习使用。这些示例不是针对生产环境设计的,也没有在生产环境中进行测试。对于这些示例,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 运行包
打开命令提示符窗口。
使用**“更改目录”**命令 cd 将目录更改为 C:\Program Files\Microsoft SQL Server\90\DTS\Binn,即 dtexec 所在的位置。
键入下列命令:
dtexec /f "C:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\ExecuteSQLStatementsInLoop.dtsx"
按 Enter。
有关如何使用 dtexec 实用工具运行包的详细信息,请参阅 SQL Server 2005 联机丛书中的“dtexec 实用工具”主题。
在 Business Intelligence Development Studio 中运行包
打开 Business Intelligence Development Studio。
在**“文件”菜单上,指向“打开”,再单击“项目/解决方案”**。
定位到 ExecuteSQLStatementsInLoop 示例文件夹,然后双击名为 ExecuteSQLStatementsInLoop.sln 的文件。
在解决方案资源管理器中,右键单击 SSIS Packages 文件夹中的 ExecuteSQLStatementsInLoop.dtsx,然后单击**“执行包”**。
重要提示: |
---|
如果在第一次运行在循环中执行 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 表中的数据。