我有一个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.
所以,真的,同样的错误。
答案 0 :(得分:2)
根据程序包的设置方式,您可能需要将SSIS变量映射到“执行SQL任务”中的参数。你看到的具体错误是最有可能的,因为你正在使用OLEDB连接,并且该声明可能应该阅读
EXEC sproc_AccessImport ? (SELECT MVID FROM tbl_AccessMailDataFiles WHERE FileLocation = ?)
如果您正在关注链接到的示例,那么您将把User :: mAccessLocation映射到第一个和第二个参数。我希望这是有道理的,但我不是百分之百关于你如何设置这个。