我正在创建一个SSIS包,其中Expression Task
与Data 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命令找到这样的选项。
有没有人对此有任何见解?
答案 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。 现在已解决此问题,请执行此操作进行验证。