我当前项目的一部分涉及使用 SSIS 包将具有多个选项卡的 Excel 2007 电子表格转换为相同数量的管道分隔平面文件。我有一个数据流任务,它打开 excel 文件并将所有选项卡的名称选择到对象变量中。for each 循环中的第二个数据流任务尝试从每个选项卡读取前 32 列。第二个数据流任务中的 excel 源设置为使用来自变量的 sql 命令,该变量是一个表达式,将选项卡名称替换为其他常量 sql 语句,如下所示:
SELECT F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17,
F18, F19, F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, F30, F31, F32
FROM [Securities Portfolio$]
Run Code Online (Sandbox Code Playgroud)
excel连接管理器中的“第一行有列名”框没有标记。
事情是这样的:这适用于大多数选项卡。上面那个有效。但是,其中三个导致以下错误:
The SQL command requires 2 parameters, but the parameter mapping only has 0 parameters.
Run Code Online (Sandbox Code Playgroud)
我修改了包以打印日志文件中使用的所有 SQL 语句。唯一的区别在于选项卡名称。没有任何问号,这就是我认为 SSIS 用来标记参数的方法。我无法弄清楚是什么导致了这种情况,甚至无法弄清楚失败的 SQL 查询与正常工作的查询有何不同:
SELECT F1, F2, …Run Code Online (Sandbox Code Playgroud)