Sql server SSIS OLEDB数据传输调用参数化存储过程|未找到列

Sql server SSIS OLEDB数据传输调用参数化存储过程|未找到列,sql-server,ssis,oledb,Sql Server,Ssis,Oledb,我有一个SQL server存储过程,它将数据库名称的一部分作为参数。当从SQLServerManagementStudio执行时,它可以完美地工作 但是,我需要从SSIS OLE DB源组件调用此SP。在OLE DB源组件中指定SQL命令和参数时,出现以下错误: “SSIS错误代码DTS_E_OLEDBERROR处出错。出现OLE DB错误。” 发生错误。错误代码:0x80004005。OLE DB记录可用。 来源:“Microsoft SQL Server本机客户端10.0”Hresult:

我有一个SQL server存储过程,它将数据库名称的一部分作为参数。当从SQLServerManagementStudio执行时,它可以完美地工作

但是,我需要从SSIS OLE DB源组件调用此SP。在OLE DB源组件中指定SQL命令和参数时,出现以下错误:

“SSIS错误代码DTS_E_OLEDBERROR处出错。出现OLE DB错误。” 发生错误。错误代码:0x80004005。OLE DB记录可用。 来源:“Microsoft SQL Server本机客户端10.0”Hresult:0x80004005 描述:“链接服务器的OLE DB提供程序“SQLNCLI10”不支持 不包含该表该表不存在或当前 用户对该表没有权限。“:无法检索 来自数据源的列信息。请确保目标表 在数据库中,可以使用”

基本上,它找不到存储过程使用的表,因为数据库名称是参数化的。我四处搜索,发现OLEDB数据源需要表的元数据。我怎样才能提供这个

这是我的存储过程:

USE [ILLP]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[OUTPUT_MI_Tyep12] @param1 varchar(5)
AS
BEGIN
    SET FMTONLY OFF;
   SET NOCOUNT ON;

declare @query varchar(1000)

set @query='
SELECT [M12]
      ,[T3Size]
      ,[SizeVCost]
      ,NULL as [DefaultTonnage]
      ,NULL as [IdleCost]
      ,NULL as [SuperLocoID]
      ,[IfAllowFleetSizeVio]
  FROM [ServN\PROD2].[Scenario_' + @param1 +'_PRD].[dbo].[Para_LTYPE]'

exec(@query)
END

我猜您正试图使用SSIS中带有参数的SP在不同的数据库中循环。但是,您可以使用变量源中的Select命令执行此操作:

  • 创建一个新变量-
    选择\u OUTPUT\u MI\u Tyep12
    例如(字符串类型)
  • 在变量属性中,检查evaluatesExpression=True
  • 在表达式下使用以下内容:

    SELECT [M12]
          ,[T3Size]
          ,[SizeVCost]
          ,NULL as [DefaultTonnage]
          ,NULL as [IdleCost]
          ,NULL as [SuperLocoID]
          ,[IfAllowFleetSizeVio] 
    FROM [ServN\\PROD2].[Scenario_" + @[User::DBNameParameter]  + "_PRD].[dbo].[Para_LTYPE]
    
  • 为您的特定参数更改
    @[User::dbname参数]

  • 在连接管理器中使用SQL命令from变量,选择
    SELECT\u OUTPUT\u MI\u Tyep12
    变量
  • 这应该允许您从表中收集所有元数据,并继续进行其余的数据流