Parameters SQL命令需要1个参数,但使用OLE DB源和变量SSIS中的SQL命令时,参数映射只有0

Parameters SQL命令需要1个参数,但使用OLE DB源和变量SSIS中的SQL命令时,参数映射只有0,parameters,ssis,oledb,oledbcommand,Parameters,Ssis,Oledb,Oledbcommand,我正在创建一个SSIS包,其中有一个表达式任务连接到控制流中的数据流任务 表达任务是: @[User::DateVariable]=yearDATEADDday,-@[$Project::DaystoReload],getdate*10000 OLE DB源使用SQL命令from变量作为源,其外观如下: 选择国家、人口、地区、日期 内部联接[+@[User::DatabaseName]+].[dbo].[Country] 哪里的日期>= User::DatabaseName已将Evaluates

我正在创建一个SSIS包,其中有一个表达式任务连接到控制流中的数据流任务

表达任务是:

@[User::DateVariable]=yearDATEADDday,-@[$Project::DaystoReload],getdate*10000

OLE DB源使用SQL命令from变量作为源,其外观如下:

选择国家、人口、地区、日期

内部联接[+@[User::DatabaseName]+].[dbo].[Country] 哪里的日期>=

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

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

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

我一直在尝试用谷歌搜索这个问题,但是我没有找到一个解决方案来解决OLEDB源何时使用变量中的SQL命令,而只是SQL命令,其中有一个名为Parameter的选项,可以映射到参数。我还没有从变量中使用Sql命令找到这样的选项


有人对此有什么见解吗

您不能通过变量使用SQL命令在OLEDB源中传递参数

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

因此,您的SQL变量应该如下所示:

"SELECT Country, Population, Region, Date

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

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

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

从[数据$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,这意味着只有标题a中的16列数据。 要么将范围从[Data$A2:R]更改,要么将列保留到F16。
此问题现已解决,请执行此操作进行验证

既然你的变量以前已经填充过了,为什么不写Where Date>=+@User::datevariable呢?我也试过了。在SQL Server中,“我的日期”的数据类型为int,而SSIS中相应的变量的数据类型为int32。我在SQL查询变量中使用'User::DateVariable'时遇到困难。我尝试过使用+@[User::DateVariable]+,++[User::DateVariable]+,但它导致了错误,这似乎表明使用+无法处理整数变量。我要试试你的解决方案,看看我的整数变量哪里失败了,就像我写的。您应该通过编写DT_WSTR,20VARIABLE来转换它-我刚刚自己测试了它,它可以很好地使用一个int变量。我看到您也有这种差异,我测试了它,它可以工作。谢谢