Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures SSIS执行SQL查询任务找不到存储过程_Stored Procedures_Ssis_Task_Executequery - Fatal编程技术网

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

Stored procedures SSIS执行SQL查询任务找不到存储过程,stored-procedures,ssis,task,executequery,Stored Procedures,Ssis,Task,Executequery,我正在处理一个现有的SSIS包,以便向其中添加自定义日志记录。我正在尝试测试它,我有一个执行SQL任务,它不是我创建的,它得到了以下错误 执行查询 “ap_pfl_DropProfileTables” 失败,出现以下错误: “找不到存储过程'ap_pfl_DropProfileTables'。”。 可能的失败原因:查询“ResultSet”存在问题 属性设置不正确,参数设置不正确,或 未正确建立连接 我不知道为什么会出现此错误,因为: 我没有创建或更改它,该包在生产中运行时没有错误 存储的进程只

我正在处理一个现有的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并不重要。

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

    具体来说,我的情况是:

  • 我需要使用ADO.Net,因为我正在运行SQLAzure
  • 我想捕获存储过程返回值
  • 首先,我尝试了这个: 在SQLStatement中,我输入了proc名称(不带EXEC)

    在ISQUERYSTORED过程中,我输入了False

    在ResultSet中,我没有添加任何内容

    在参数映射选项卡中,我将

    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