当前位置: 首页 > 知识库问答 >
问题:

从业务中心内执行存储过程时出现 SQL 异常

谷梁玺
2023-03-14

我们有一个存储过程,用于创建新的 SSIS 执行并启动它:

Declare @execution_id bigint

EXEC [SSISDB].[catalog].[create_execution] 
    @package_name=N'00 XXXX.dtsx', 
    @execution_id=@execution_id OUTPUT, 
    @folder_name=N'XX', 
    @project_name=N'XXX';

EXEC [SSISDB].[catalog].[start_execution] @execution_id;

当我们调用使用SQLServerManagementStudio登录的存储过程时,它工作得非常好。但是,当我们从BizTalk中(作为BTS服务帐户用户)执行此存储过程时,会收到以下错误:

系统。data . sqlclient . sqlexception(0x 80131904):“-”附近的语法不正确。< br >“-”附近的语法不正确。< br >“-”附近的语法不正确。

服务器堆栈跟踪:< br >在系统中。runtime . async result . end[tasync result](IAsyncResult结果)< br >在系统中。service model . channels . service channel . SendAsyncResult . end(SendAsyncResult result)< br > at System。service model . channels . service channel . end call(String action,Object[] outs,IAsyncResult result)< br > at System。service model . channels . service channel . end request(IAsyncResult结果)

异常在[0]:
在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData

我们使用的模式从BTS到MSSQL:

<?xml version="1.0" encoding="utf-16"?>
<schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo" version="1.0" xmlns="http://www.w3.org/2001/XMLSchema">
  <annotation>
    <appinfo>
      <fileNameHint xmlns="http://schemas.microsoft.com/servicemodel/adapters/metadata/xsd">TypedProcedure.dbo</fileNameHint>
    </appinfo>
  </annotation>
  <element name="StartBifImport">
    <annotation>
      <documentation>
        <doc:action xmlns:doc="http://schemas.microsoft.com/servicemodel/adapters/metadata/documentation">TypedProcedure/dbo/StartBifImport</doc:action>
      </documentation>
    </annotation>
    <complexType>
      <sequence />
    </complexType>
  </element>
</schema>

BTS服务号在存储过程所在的数据库上具有db_owner的作用,我们已明确授予它对SSIS文件夹和SSIS包的所有“授予”权限。

我们可以在执行表中看到没有创建执行,因此该调用似乎出错了。当连接到SQLProfiler时,我们看到相同的错误返回,但没有更多关于错误的上下文;离开没有太多痕迹。

关于如何调试或解决此问题的任何指针/想法?

共有2个答案

葛高澹
2023-03-14

创建一个简单的单向发送端口,其过滤器(和映射,如果适用)与您正在忙着调试的过滤器相同,只需写入文件。使用文件的输出来确认发送到WCF-SQL适配器的消息具有它所期望的结构。

根据模式判断,它应该生成一个包含以下内容的文件:

<ns0:StartBifImport xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo">
</ns0:StartBifImport>
吕作人
2023-03-14

我建议不要使用“强类型过程”模式,而是使用“过程”模式。WCF-SQL适配器中的“强类型过程”在为包含临时表的存储过程生成模式时存在一个文档化的问题。

SQL适配器不支持为定义中包含临时表的强类型存储过程生成元数据。相反,您应该在使用添加适配器服务参考插件或使用适配器服务外接程序时,从过程节点下为同一过程生成元数据。

更多信息可以在这里找到:https://msdn . Microsoft . com/en-us/library/DD 788435(BTS . 10)。aspx # BKMK _ SQLMetadataStronglyTyped

 类似资料:
  • 问题内容: 我想使用Oracle SQL Developer异步执行存储过程很多次。 伪代码 存储过程的目的是进行一些插入。为了进行测试,我只想异步执行存储过程很多次。我不在乎任何返回值。 有没有一种 “简便”的 方法来做到这一点? 问题答案: 由于您要模拟N个会话,每个会话均调用该过程1000 / N次,因此我可能会执行类似的操作 本示例将启动10个会话,每个会话将快速连续执行该过程100次,前

  • 当我试图执行这个存储过程时,我收到了一个错误:“数据库连接器错误:'不允许从数据类型'CHAR'隐式转换为'INT'。使用CONVERT函数运行这个查询“为什么?”?我该怎么解决这个问题?谢谢 这是im用来执行SP的查询: 该列被设置为char(4),因此我不认为查询和数据类型不匹配 顺便说一句,我试过使用单引号、双引号和不使用引号的(“7066”),但仍然得到相同的sql错误。请帮忙 PS我在用

  • 问题内容: 我对执行速度非常慢的存储过程有些困惑。该存储过程基本上包含一个使用传入参数(in_id)的查询,并将其放在游标中,如下所示: 当我获得带有预定义值的SQL查询的执行计划时,使用索引可以得到良好的查询结果。但是,当我从应用程序中调用该过程时,我看到没有索引在使用中,并且该表得到了完整扫描,从而降低了性能。 如果删除WHERE子句的第一部分“(in_id为null)”,则应用程序的性能将再

  • 我如何在服务器的另一个存储过程中执行SQL存储过程?我将如何传递第二个过程的参数。?

  • 问题内容: 我正在使用代码点火器框架。我一直在尝试执行我在PHP上的Microsoft SQL Server 2008上编写的存储过程(无参数),但是出现错误。此存储过程在Microsoft SQL Server上运行良好,没有错误。我正在使用sqlsrv作为驱动程序,如果有帮助,我具有PHP 5.2版。 这是我得到的错误 以下是我拥有的部分代码 我用实际查询替换了实际查询,它确实可以工作,但不能

  • 我在SQL Server中有一个数据库,其中包含一天内收集的数据,在PostgreSQL中有一个数据库,其中包含OSM数据。我需要修改收集的数据,以便为我的用户创建报告。 现在,我设想以某种方式从SQL Server调用PostgreSQL过程,将收集的数据传递给PostgreSQL,对这些数据进行处理,然后将另一个结果集返回给SQL Server以创建报告。 实现这一目标的“最有效”方式是什么?