Stored procedures SSIS执行SQL查询任务找不到存储过程
我正在处理一个现有的SSIS包,以便向其中添加自定义日志记录。我正在尝试测试它,我有一个执行SQL任务,它不是我创建的,它得到了以下错误 执行查询 “ap_pfl_DropProfileTables” 失败,出现以下错误: “找不到存储过程'ap_pfl_DropProfileTables'。”。 可能的失败原因:查询“ResultSet”存在问题 属性设置不正确,参数设置不正确,或 未正确建立连接 我不知道为什么会出现此错误,因为:Stored procedures SSIS执行SQL查询任务找不到存储过程,stored-procedures,ssis,task,executequery,Stored Procedures,Ssis,Task,Executequery,我正在处理一个现有的SSIS包,以便向其中添加自定义日志记录。我正在尝试测试它,我有一个执行SQL任务,它不是我创建的,它得到了以下错误 执行查询 “ap_pfl_DropProfileTables” 失败,出现以下错误: “找不到存储过程'ap_pfl_DropProfileTables'。”。 可能的失败原因:查询“ResultSet”存在问题 属性设置不正确,参数设置不正确,或 未正确建立连接 我不知道为什么会出现此错误,因为: 我没有创建或更改它,该包在生产中运行时没有错误 存储的进程只
关于如何解决这个问题有什么想法吗?是的,这很令人沮丧,但确实可行。关键是不要使用ADO.NET连接管理器,而是使用老式的ADO连接管理器。第二个关键是不要在执行SQL任务编辑器的SQLStatement属性中使用EXEC或EXECUTE。只需输入存储过程的名称(也可以使用由三部分组成的名称约定database.schema.storedprocedure)
我还没有在存储过程中尝试使用params。此外,我还没有在OLE DB连接管理器中尝试过这种方法 我自己也遇到了这个问题,下面是我所做的(使用ADO.NET连接) 在SQLStatement字段中,我输入了存储过程的名称(dbo.myStoredProc)。 然后,我将IsQueryStoredProcedure属性设置为“True”
我认为,当IsQueryStoredProcedure设置为true时,对象会自动在EXEC前面加上前缀,以确定该命令是存储过程调用。我知道这是一个旧线程,但在SQL 2008 R2上使用SSIS时,我刚刚遇到了这个问题
对于使用ADO.NET连接的我来说,实际上我必须将
isquerystoredprocesdure
设置为False
,然后错误就消失了。我是否使用了EXEC并不重要。在遇到同样的问题后,我对此进行了一些调查:
具体来说,我的情况是:
Variable Name Direction Data Type Parameter Name Parameter Size
User::MyVariable ReturnValue Int32 0 -1
它运行时不会出错,但不会捕获返回值
我假设如果您将IsQueryStoredProcedure设置为true,它应该可以正确地连接所有这些。但它会返回一个错误
这表示在使用ADO.Net时捕获返回值时“Set-IsQueryStoreProcedure设置为True”。但它返回的错误是OP
作为解决办法,我做了以下工作:
我把IsQueryStoredProcedure留作假的
我将ResultSet设置为singlerow
我删除了参数映射,而是映射了一个结果集:
Result Name Variable Name
0 User::MyVariable
您确定您的连接字符串指向正确的位置吗?存储过程是否存在于给定的架构中?执行存储过程的帐户是否具有访问该存储过程的正确权限?连接字符串是良好的,因为同时运行的数据流任务使用相同的连接,并且它成功完成,没有错误。我使用的是系统管理员帐户,因此它具有访问权限。存储过程是在dbo下创建的。参数是否在任意点更改和/或是否正确映射?如果将查询更改为
exec dbo.ap\u pfl\u DropProfileTables会发生什么情况?可能在行为不正常的连接中有一个表达式会被动态计算,这在SSIS设计表面上可能不明显。一种确定的检查方法是使用SQL Profiler监视您希望查询针对的数据库,并验证它确实针对您期望的数据库运行。您可以做的另一件事是从SSIS XML中提取连接,并直观地比较它们,看看是否有什么不同。
DECLARE @R INT
EXEC @R = MySchema.MyProc;
SELECT @R
Result Name Variable Name
0 User::MyVariable