Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 为什么Excel源代码认为我的查询有参数?_Ssis_Excel 2007_Jet - Fatal编程技术网

Ssis 为什么Excel源代码认为我的查询有参数?

Ssis 为什么Excel源代码认为我的查询有参数?,ssis,excel-2007,jet,Ssis,Excel 2007,Jet,我当前项目的一部分涉及使用SSIS包将具有多个选项卡的Excel 2007电子表格转换为相同数量的管道分隔平面文件。我有一个数据流任务,它打开excel文件,并选择所有选项卡的名称和对象变量。for each循环中的第二个数据流任务尝试从每个选项卡读取前32列。第二个数据流任务中的excel源被设置为使用变量中的sql命令,该变量是一个表达式,该表达式将选项卡名称替换为其他常量sql语句,如下所示: SELECT F1, F2, F3, F4, F5, F6, F7, F8, F9, F10,

我当前项目的一部分涉及使用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$]
excel连接管理器中的“第一行有列名”框未标记

事情是这样的:这适用于大多数选项卡。上面的一个有效。但是,其中三个导致以下错误:

The SQL command requires 2 parameters, but the parameter mapping only has 0 parameters.
我已经修改了这个包来打印日志文件中使用的所有SQL语句。唯一的区别在于选项卡名称。没有一个有任何问号,这就是我认为SSIS用来标记参数的地方。我不知道这是什么原因造成的,甚至不知道失败的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 [Capital - Part1$]
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 [Capital - Part2$]
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 Sources$]

如果有任何帮助,我们将不胜感激。

好的,我想好了,我会把它写在这里,以防其他人有类似的问题,因为我花了几个小时在谷歌上试图弄清楚到底发生了什么

事实证明,并非所有的工作表都有32列。我一开始并没有想到这可能是一个问题,因为当你在Excel中打开一个Excel文件时,如果你只是滚动更多的列,那么总是会有更多的列。但是,按照Microsoft Jet读取Excel文件的方式,每个工作表都有固定数量的列

导致问题的工作表是少于32列的工作表。如果只有30列,并且我尝试选择F32,MicrosoftJet会假定F32应该是参数的名称。据我所知,SSIS 2008不允许您设置用于Jet的参数值,但Jet仍将解析您的查询,并确定如果找不到某些列名,则需要一些参数

为了解决这个问题,我将获取工作表名称的步骤更改为同时返回每个工作表中的列数,然后将查询更改为对不存在的任何列返回NULL。因此,对于只有30列的工作表,我现在运行以下命令:

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, NULL AS F31, NULL AS F32
FROM [Capital - Part1$]
这就解决了问题