SQL命令需要1个参数,但是参数映射在使用OLE DB Source和SQL Command from Variable, SSIS时只有0个

The SQL command requires 1 parameter, but the parameter mapping only has 0 when using OLE DB Source and SQL Command from Variable, SSIS

我正在创建一个 SSIS 包,其中有一个 Expression Task 连接到 Control Flow 中的 Data Flow Task

表达式任务是:

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

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

"SELECT 国家、人口、地区、日期

INNER JOIN [" + @[User::DatabaseName] + "].[dbo].[国家/地区] 其中日期 >= ?"

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

当我在 SSMS 中使用查询时,我使用 Expression Task 评估的值 DateVariable 到 "hard-coded" 然后我得到正确的输出,但在 SSIS 中我得到错误

The SQL command requires 1 parameter, but the parameter mapping only has 0

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

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

您不能通过变量使用 SQL 命令在 OLEDB SOURCE 内部传递参数。

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

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

"SELECT Country, Population, Region, Date

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

在这种情况下,当您使用 SSIS 从 excel 导入数据时,您可能会遇到此类 issue.The 此问题的解决方案如下:

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

SELECT F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18 来自[数据$A2:P]

然后出现错误需要2个参数但映射为0。 当我检查时发现我们正在获取 18 列的数据,但在 sheet 中仅提及 A2:P 这意味着 16 列 dat## Heading ##a only 。 要么更改范围 From [Data$A2:R],要么只使用 F16 之前的列。 该问题现已解决,请通过此操作进行验证。