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 之前的列。
该问题现已解决,请通过此操作进行验证。
我正在创建一个 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 之前的列。 该问题现已解决,请通过此操作进行验证。