Ошибка "... OLE DB Source.Outputs [OLE DB Source Output]. Колонки [XXXXXXXX] на выходе без ошибок не имеют соответствующего выхода

Я потратил часы, пытаясь исправить эту проблему. Для столбца, который дает мне проблему, я использую скалярную функцию в sql-сервере для захвата имени. Функция правильная и работает нормально. Затем я использую хранимую процедуру для использования с ssis. Столбец, который дает мне ошибку, указывает, что у него нет соответствующего столбца вывода на выходе ошибки. Кажется, все в порядке. В предыдущих рекомендациях я сделал следующее:

  • Удаленный источник и назначение и переназначенные все
  • Изменено свойство DelayValidation на true
  • Изменено максимальное количество ошибок до 100
  • Непроверенные и перепроверенные доступные внешние столбцы в источнике

Это были рекомендации на предыдущие форумы.

Я стажер и хочу получить это самостоятельно, не спрашивая моего менеджера. Я потратил бесчисленные часы, пытаясь решить проблему.

Любые предложения?

РЕДАКТИРОВАНИЕ ДОБАВИТЬ ЗНАЧЕНИЕ К ВОПРОСУ

Ниже приведен мой запрос в моем источнике OLE DB

SELECT *
FROM RExtenstionBase R
LEFT OUTER JOIN AExtensionBase A
ON R.ASN = A.SN
AND R.ARN = A.R

Этот запрос дает мне поля, которые мне нужны из Dynamics CRM.

Ниже приведен вызов моей хранимой процедуры в команде OLE DB:

EXEC InsertRepairs ?,?,?,?,?,?,?,?,?,?

Ниже приведена моя хранимая процедура script:

USE [MSCRM_RC]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[InsertRepairs] 
    -- Add the parameters for the stored procedure here

    @ROID nvarchar(100),
    @AType nvarchar(100),
    @ARN nvarchar(100),
    @DateReceived datetime,
    @RForRR nvarchar(100),
    @C nvarchar(100),
    @SN nvarchar(100),
    @ASN nvarchar(100),
    @Performed nvarchar(100),
    @COR decimal


AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DECLARE @newID AS UNIQUEIDENTIFIER
    SET @newID = NEWID()

INSERT INTO [dbo].[A_RBase] /***BASE TABLE ALWAYS THE SAME ***/
           ([A_RCRIDID] /*Always change this tho */
           ,[CreatedOn]
           ,[CreatedBy]
           ,[ModifiedOn]
           ,[ModifiedBy]
           ,[CreatedOnBehalfBy]
           ,[ModifiedOnBehalfBy]
           ,[OwnerId]
           ,[OwnerIdType]
           ,[OwningBusinessUnit]
           ,[statecode]
           ,[statuscode]
           ,[ImportSequenceNumber]
           ,[OverriddenCreatedOn]
           ,[TimeZoneRuleVersionNumber]
           ,[UTCConversionTimeZoneCode])
     VALUES
           (@newID
           ,GETUTCDATE() -- CreatedOn
           ,'XXXXXXXXXXXXXXXXXXXXXXX' -- CreatedBy
           ,GETUTCDATE()                            -- ModifiedOn
           ,'XXXXXXXXXXXXXXXXXXXXXXX'   -- ModifiedBy
           ,NULL                                    -- CreatedOnBehalf
           ,NULL                                    -- Modified''
           ,'XXXXXXXXXXXXXXXXXXXXXXX'   -- OwnderId
           ,8
           ,'XXXXXXXXXXXXXXXXXXXXXXX'
           ,0                                       -- statecode
           ,1                                       -- statuscode
           ,5                                       -- ImportSequenceNumber
           ,NULL                                -- Overrid
           ,0                                       -- TimeZoneRule 
           ,NULL)                                   -- UTCConversion




INSERT INTO [dbo].[A_RExtensionBase]
           ([A_RCRID]
        ,[A_Name]
           ,[A_AType]
        ,[A_ARN]
           ,[A_DateReceived]
           ,[A_RForRR]
        ,[A_C]
        ,[A_SN]
        ,[A_ASN]
           ,[A_Performed]
           ,[A_COR])
     VALUES
           (@newID,
         @ROID,
         @AType,
         @ARN,
            @DateReceived,
            @RForRR,
         @C,
         dbo.Lookup_SNID_GUID(@SN)
         @ASN,
            @Performed ,
         @COR)


END

Ниже приведена моя скалярнозначная функция:

USE [MSCRM_RC]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER FUNCTION [dbo].[Lookup_SNID_GUID] 
(
      -- Add the parameters for the function here
      @SN_Name nvarchar(100)
)
RETURNS UNIQUEIDENTIFIER
AS
BEGIN
      -- Declare the return variable here
      DECLARE @SN_GUID UNIQUEIDENTIFIER
      SELECT @SN_GUID = SNID

      FROM SNExtensionBase
      WHERE name = (@SN_Name)

      RETURN @SN_GUID
END

Ответ 1

По-видимому, это обычная ошибка с пакетами SSIS. Я получил его, чтобы устранить ошибку, сверлив в источник OLE DB, щелкнув вкладку столбцов, найдя доступный внешний стол, который был включен в сообщение об ошибке, и снимите флажок и перепроверяем его. ERROR SOLVED!

Ответ 2

Я столкнулся с ошибкой "Ошибка вывода не имеет соответствующего вывода" довольно часто при добавлении нового столбца в таблицу, которая должна обрабатываться существующим пакетом SSIS. Эта ошибка появилась вместе с сообщением об ошибке, в котором говорилось, что "Значение не входит в ожидаемый диапазон".

Добавленный столбец должен быть обработан существующим пакетом SSIS. Ожидаемое поведение заключается в том, что SSIS распознает, что есть новый столбец и выберите этот столбец на странице столбцов OLEDB Source Task SSIS для обработки. Однако при первом открытии исходной задачи OLEDB после изменения таблицы я получил в два раза следующее сообщение об ошибке: "Значение не входит в ожидаемый диапазон". Сообщение об ошибке появилось при открытии редактора и при открытии страницы "Столбцы" редактора. В расширенном редакторе задачи источника OLEDB новый столбец появился в дереве столбцов вывода выходных данных OLEDB, но не в дереве столбцов вывода ошибок OLEDB. Это основная проблема сообщения об ошибке. К сожалению, похоже, что невозможно добавить недостающий столбец вручную.

Чтобы решить эту проблему, удалите и повторно добавьте вновь добавленный столбец на странице Columnns обычного редактора, как указано Jeff.

Возможно, стоит упомянуть, что источником данных задачи OLEDB Source был модифицированный MDS View. Microsoft CRM Dynamics также использует представления. Это приводит меня к выводу, что использование представлений в качестве источника данных может приводить к любой из вышеупомянутых ошибок при изменении типов данных или добавлении/удалении столбцов.

Related Thread: Как исправить SSIS: "Значение не входит в ожидаемый диапазон" ?

Описанное обходное решение относится к Visual Studio 2008 Версии 9.0.30729.4462 QFE с Mircorsoft.NET Framework 3.5 SP1. База данных - это SQL Server 2008 R2 (SP2).

Ответ 3

Исправьте меня, если я ошибаюсь, но обнаружил, что нажатие кнопки предварительного просмотра при получении данных из источника вызывает неправильные длины для столбцов, особенно для строк.
Это может быть из-за длины определяется из полученных данных предварительного просмотра. Таким образом, лучшей практикой является щелчок по столбцам-вкладке в диалоговом окне "Источник" после выбора исходной таблицы. Это в основном связано с источниками ODBC.