SQL 从 Biztalk 中执行存储过程时出现异常

SQL Exception when executing stored procedure from within Biztalk

我们有一个存储过程可以创建新的 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;

当我们调用这个使用 SQL Server Management Studio 登录的存储过程时,它工作得很好。但是,当我们从 BizTalk(作为 BTS 服务帐户用户)中执行此存储过程时,我们收到此错误:

System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near '-'.
Incorrect syntax near '-'.
Incorrect syntax near '-'.

Server stack trace:
at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndRequest(IAsyncResult result)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System.ServiceModel.Channels.IRequestChannel.EndRequest(IAsyncResult result)
at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallback(IAsyncResult result)

我们从 BTS 到 MS 使用的架构 SQL:

<?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 包的所有 'grant' 权限。

我们可以在执行中看到 table 没有创建执行,因此该调用似乎出了问题。当与 SQL Profiler 连接时,我们看到返回相同的错误,但没有更多关于错误的上下文;离去无痕

关于如何调试或解决此问题的任何pointers/ideas?

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

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

<ns0:StartBifImport xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo">
</ns0:StartBifImport>

我建议不要使用 "Strongly-Typed Procedure" 架构,而应使用 "Procedure" 架构。 WCF-SQL 适配器中的 "Strongly-Typed Procedure" 在为其中包含临时表的存储过程生成架构方面存在已记录的问题。

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

可在此处找到更多信息:https://msdn.microsoft.com/en-us/library/dd788435(BTS.10).aspx#BKMK_SQLMetadataStronglyTyped