4

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

执行查询

“ap_pfl_DropProfileTables”

失败并出现以下错误:

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

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

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

有想法该怎么解决这个吗?

4

4 回答 4

3

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

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

于 2013-11-04T18:38:22.490 回答
3

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

对于使用 ADO.NET 连接的我来说,我实际上必须设置IsQueryStoredProcedureFalse,然后错误就消失了。我用EXEC不用都没关系。

于 2015-06-18T08:54:53.813 回答
1

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

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

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

于 2013-12-10T19:51:39.863 回答
0

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

具体我的情况是:

  1. 我需要使用 ADO.Net,因为我正在针对 SQL Azure 运行
  2. 我想捕获存储过程的返回值

首先我尝试了这个:

SQLStatement中,我输入了 proc 名称(没有 EXEC)

myschema.MyProc;

IsQueryStoredProcedure我把False

ResultSet我放了None

在我输入的参数映射选项卡中

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

将 IsQueryStoredProcedure 保留False

我将 ResultSet 设置为单行

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

Result Name  Variable Name
     0          User::MyVariable
于 2018-03-26T01:16:58.310 回答