SSIS 执行 SQL 查询任务找不到存储过程

Posted

技术标签:

【中文标题】SSIS 执行 SQL 查询任务找不到存储过程【英文标题】:SSIS Execute SQL Query task cannot find stored procedure 【发布时间】:2013-02-08 17:36:21 【问题描述】:

我正在开发一个现有的 SSIS 包以向其中添加自定义日志记录。我正在尝试对其进行测试,但我有一个未创建的执行 SQL 任务,但出现以下错误。

执行查询

“ap_pfl_DropProfileTables”

失败并出现以下错误:

“找不到存储过程 'ap_pfl_DropProfileTables'。”。 可能的失败原因:查询有问题,“ResultSet” 属性设置不正确,参数设置不正确,或 连接未正确建立。

我不知道为什么会收到此错误,因为:

    我没有创建或更改它,这个包在生产中运行时没有错误。 存储过程只是截断两个表。它没有结果集或参数。 连接工作正常,因为此存储过程与另一个运行数据流任务的线程同时运行,该任务成功运行并使用此包中仅有的两个连接。 我已经对数据库进行了两次和三次检查,以确保存储过程存在并且拼写正确。我什至检查了存储过程中字母的大小写。

关于如何解决这个问题的任何想法?

【问题讨论】:

您确定您的连接字符串指向正确的位置吗? sproc 是否存在于给定的模式中?执行存储过程的帐户是否具有访问它的正确权限? 连接字符串很好,因为同时运行的数据流任务使用相同的连接,并且成功完成,没有错误。我正在使用系统管理员帐户,所以是的,它可以访问。存储过程是在dbo下创建的 参数是否随时更改和/或映射正确? 如果将查询更改为exec dbo.ap_pfl_DropProfileTables会发生什么? 也许你的行为不端的连接中有一个表达式会被动态评估,这在 SSIS 设计表面上可能并不明显。一种确定检查的方法是使用 SQL Profiler 来监视您希望查询针对其执行的数据库,并验证它确实针对您期望的数据库运行。您可以做的其他事情是从 SSIS XML 中提取连接并直观地比较它们,看看是否有任何不同。 【参考方案1】:

是的,这令人沮丧 - 但可行。关键是不要使用 ADO.NET 连接管理器,而是使用老式的 ADO 连接管理器。第二个关键是不要在执行 SQL 任务编辑器的 SQLStatement 属性中使用 EXEC 或 EXECUTE。只需输入存储过程的名称(也可以使用 3 部分名称约定 database.schema.storedprocedure。)

我还没有在存储过程中使用参数尝试过这个。此外,我还没有尝试过使用 OLE DB 连接管理器。

【讨论】:

【参考方案2】:

我知道这是一个旧线程,但我在 SQL 2008 R2 上使用 SSIS 时遇到了这个问题。

对于使用 ADO.NET 连接的我,我实际上必须将 IsQueryStoredProcedure 设置为 False,然后错误就消失了。我是否使用EXEC并不重要。

【讨论】:

【参考方案3】:

我自己遇到了这个问题,这就是我所做的(使用 ADO.NET 连接)

在 SQLStatement 字段中,我输入了存储过程的名称 (dbo.myStoredProc)。 然后我将 IsQueryStoredProcedure 属性设置为“True”

我在想,当 IsQueryStoredProcedure 设置为 true 时,对象会自动在 EXEC 前面添加以识别该命令是存储过程调用。

【讨论】:

【参考方案4】:

在遇到同样的问题后,我对此进行了一些调查:

具体我的情况是:

    我需要使用 ADO.Net,因为我运行的是 SQL Azure 我要捕获存储过程返回值

首先我尝试了这个:

SQLStatement 中我输入了 proc 名称(不带 EXEC)

myschema.MyProc;

IsQueryStoredProcedure 我把 False

ResultSet 我把 None

Parameter Mapping 标签中我放了

Variable Name      Direction    Data Type    Parameter Name   Parameter Size
User::MyVariable  ReturnValue     Int32            0                 -1

这运行没有错误,但不捕获返回值。

假设如果您将 IsQueryStoredProcedure 设置为 true,它应该正确连接所有这些。但它会返回一个错误。

这个https://technet.microsoft.com/en-us/library/cc280502(v=sql.110).aspx 表示在使用 ADO.Net 时捕获返回值“Set IsQueryStoreProcedure 设置为 True”。但它返回的错误是 OP

作为一种解决方法,我这样做了:

DECLARE @R INT
EXEC @R = MySchema.MyProc;
SELECT @R

我离开 IsQueryStoredProcedureFalse

我将 ResultSet 设置为单行

我删除了参数映射,而是映射了一个结果集:

Result Name  Variable Name
     0          User::MyVariable

【讨论】:

以上是关于SSIS 执行 SQL 查询任务找不到存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如果存储过程失败,则在执行 SQL 任务中将输出变量值获取到 ssis 变量中

SSIS 错误:[执行 SQL 任务] 错误:执行查询

如何记录SSIS执行SQL任务的输出

SQL Server 2005 使用 GETDATE() 作为参数通过 SSIS 运行存储过程

在其执行存储过程中查找Execute SQL任务组件ID

R SQL查询:找不到存储过程