2012-08-10 59 views
0

我有一个SSIS包,它遍历一个表,并为表中的每一行,将两个不同列的值作为参数传递给存储过程。至少,这是它应该做的。它实际上做的是给我这个错误:引用SSIS包中的变量

[Execute SQL Task] Error: Executing the query "EXEC sproc_AccessImport @mAccessLocation (SELECT M..." failed with the following error: "Must declare the scalar variable "@mAccessLocation".". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. 

我为了使该抓住信息的一部分跟着this tutorial,而应该执行存储过程的代码是:

EXEC sproc_AccessImport @mAccessLocation (SELECT MVID FROM tbl_AccessMailDataFiles WHERE FileLocation = @mAccessLocation) 

我一直在网上寻找,但没有发现任何有用的东西。这是我第一次使用SSIS,所以我怀疑我只是做错了什么。有谁知道究竟是什么?谢谢。

编辑:我试图映射的变量作为参数,与选项:

Variable Name: User::mAccessLocation 
Direction:  Input 
Data Type:  VARCHAR 
Parameter Name: Path 
Parameter Size: 200 

,改变了SQL查询:

EXEC sproc_AccessImport @Path (SELECT MVID FROM tbl_AccessMailDataFiles WHERE FileLocation = @Path) 

现在给我的错误:

[Execute SQL Task] Error: Executing the query "EXEC sproc_AccessImport @Path (SELECT MVID FROM tb..." failed with the following error: "Must declare the scalar variable "@Path".". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. 

所以,真的,同样的错误。

回答

2

根据您的软件包设置方式,您可能需要将SSIS变量映射到执行SQL任务中的参数。您所看到的特定的错误是最liklely因为你使用的是OLEDB连接和statment也许应该读

EXEC sproc_AccessImport ? (SELECT MVID FROM tbl_AccessMailDataFiles WHERE FileLocation = ?) 

如果你正在跟踪您链接到的例子,那么你会在用户:: mAccessLocation映射到第一和第二个参数。我希望这是有道理的,但我不是100%的你如何设置。

+0

我编辑了我的答案并提供了答案,因为它比试图将它置于评论中更容易。如果有任何其他信息可以帮助,请告诉我。我不确定哪些会有所帮助。 – SaintWacko 2012-08-10 20:08:20

+0

即使您在执行SQL任务的属性中声明了名称,参数仍应该由?用于OLEDB连接。 – SQLMD 2012-08-10 20:32:28

+0

啊,好的。这很奇怪。那么,现在它说'[执行SQL任务]错误:执行查询“EXEC sproc_AccessImport?(SELECT MVID FROM tbl_Ac ...”失败,出现以下错误:“没有为一个或多个必需参数给出值”。听起来像它可能是一个抓取数据的问题, – SaintWacko 2012-08-10 20:36:37