SSIS技术问题:如何利用Foreach Loop Container创建数据表?
嗨,我来帮你搞定这个SSIS的配置问题!你已经搭好了Foreach Loop遍历文件的架子,接下来只需要两步:把CSV文件里的建表脚本读出来,再交给Execute SQL Task执行就行,具体步骤如下:
1. 先准备好SSIS变量
先在包的变量面板里创建两个String类型的变量:
@FilePath:用来存Foreach Loop遍历到的每个CSV文件的完整路径(你应该已经配置好这个了)@CreateTableScript:用来暂存从CSV里读取到的建表SQL脚本
2. 确认Foreach Loop的变量映射
打开你的Foreach Loop Container,切换到Variable Mappings标签页,确保把索引0映射到@FilePath变量——这样每次循环时,当前文件的路径就会自动存入这个变量里。
3. 添加Script Task读取脚本内容
把Script Task拖到Foreach Loop内部,双击打开配置窗口:
- 切换到Script标签页,点击Edit Script打开脚本编辑器(这里用C#举例,VB写法类似)
- 替换默认脚本为以下代码,用来读取文件内容并写入变量:
using System.IO; using Microsoft.SqlServer.Dts.Runtime; public void Main() { // 获取当前文件路径 string filePath = Dts.Variables["User::FilePath"].Value.ToString(); // 读取文件内容,注意根据你的文件编码调整(比如UTF-8、GB2312) string scriptContent = File.ReadAllText(filePath, System.Text.Encoding.UTF8); // 把脚本内容存入变量 Dts.Variables["User::CreateTableScript"].Value = scriptContent; Dts.TaskResult = (int)ScriptResults.Success; } - 别忘了在Script Task的ReadOnlyVariables里勾选
User::FilePath,ReadWriteVariables里勾选User::CreateTableScript——这样脚本才能合法访问这些变量。
4. 配置Execute SQL Task执行脚本
把Execute SQL Task拖到Script Task的后面(同样放在Foreach Loop内部),双击配置:
- General标签页:
- 连接类型选你对应的数据库类型(比如OLE DB、ADO.NET),然后选择已配置好的目标数据库连接管理器
- SQLSourceType选择Variable,然后在SourceVariable里选中
User::CreateTableScript
- Parameter Mapping标签页:不需要配置,因为我们是直接执行完整的建表脚本,不是带参数的SQL
- Result Set标签页:选择None,建表语句没有返回结果集
5. 测试运行
现在就可以运行包了!Foreach Loop会逐个遍历你的CSV文件,Script Task读取里面的建表脚本,Execute SQL Task会在目标数据库里创建对应的表。
一些注意事项
- 确保每个CSV里的SQL脚本是完整且语法正确的建表语句,否则Execute SQL Task会抛出错误
- 如果脚本里包含
GO语句,OLE DB连接可能不支持,这时候可以换成ADO.NET连接,或者把脚本里的GO去掉(单张表的建表语句一般不需要GO) - 如果脚本里有中文或特殊字符,一定要在Script Task里用对应的编码读取,避免乱码导致SQL语法错误
内容的提问来源于stack exchange,提问作者Fayçal Salhi
相关产品推荐
相关产品推荐

