SQL命令需要1个参数,但是当使用OLE DB Source和来自Variable,SSIS的SQL命令时,参数映射只有0

时间:2017-12-04 11:59:29

标签: parameters ssis oledb oledbcommand

我正在创建一个SSIS包,其中Expression TaskData Flow Task中的Control Flow相关联。

表达式任务是:

@[User::DateVariable] = year(DATEADD("day", - @[$Project::DaystoReload] , getdate() ))*10000

OLE DB Source使用SQL Command from Variable作为来源,它有外观:

"选择国家,人口,地区,日期

INNER JOIN [" + @ [User :: DatabaseName] +"]。[dbo]。[Country] 其中Date> =?"

User :: DatabaseName将EvaluateAsExpression设置为TRUE,它是一个字符串。从表达式任务创建的DateVariable在数据流任务之前是数据类型Int32

当我在SSMS中使用查询时,我使用表达式任务评估的值DateVariable到"硬编码"然后我得到正确的输出,但在SSIS中我得到错误

  

SQL命令需要1个参数,但参数映射只有0

我一直在尝试Google解决此问题,但我还没有找到OLE DB Source使用SQL Command from Variable时的解决方案,而只是SQL command中的Parameter您有一个名为{{1}}的选项,您可以将其映射到参数。我还没有使用变量的Sql命令找到这样的选项。

有没有人对此有任何见解?

2 个答案:

答案 0 :(得分:3)

您无法通过变量SQL命令在OLEDB SOURCE中传递参数。

您必须传递变量。由于您已经在Date变量中存储了一个值,因此应该可以使用

所以你的SQL变量应该是这样的:

"SELECT Country, Population, Region, Date

INNER JOIN [" + @[User::DatabaseName] + "].[dbo].[Country]  where date >= "+  (DT_WSTR,20)@[User::Date] 

答案 1 :(得分:0)

在这种情况下,当您使用SSIS从excel导入数据时,您可能会遇到此类问题。下面给出了此问题的解决方案:

当我在“ SQL命令”选项卡中通过SQL查询在excel连接管理器中使用时:

从[Data $ A2:P]中选择F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18 >

然后有一个错误,需要2个参数,但映射为0。 当我检查后发现我们正在获取18列的数据,但在工作表中仅提及A2:P,这意味着16列dat ##仅标题## a。 更改范围从[Data $ A2:R]或仅将列移至F16。 现在已解决此问题,请执行此操作进行验证。