web-dev-qa-db-ja.com

エラー "... OLE DB Source.Outputs [OLE DB Source Output] .Columns [XXXXXXXX] on the non-error output has no対応する出力がありません

私はこの問題の修正に何時間も費やしました。問題を引き起こしている列については、SQLサーバーのスカラー関数を使用して名前を取得しています。関数は正しく、正常に動作します。次に、ストアドプロシージャを使用してssisで使用します。エラーが発生している列は、エラー出力に対応する出力列がないことを示しています。すべてが元気なようです。以前の推奨事項に従って、次のことを行いました。

  1. ソースと宛先を削除し、すべてを再マップしました
  2. DelayValidationプロパティをtrueに変更しました
  3. 最大エラー数を100に変更
  4. ソース内の利用可能な外部列のチェックを外して再チェック

これらは、以前のフォーラムによる推奨事項でした。

私はインターンであり、マネージャーに依頼することなく自分でこれを取得したいと考えています。私は問題を解決するために無数の時間を費やしてきました。

助言がありますか?

質問に値を追加するための編集

以下は、my OLE DB sourceの私のクエリです。

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 ?,?,?,?,?,?,?,?,?,?

以下は私のストアドプロシージャスクリプトです。

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
15
Squ1rr3lz

どうやら、これはSSISパッケージの一般的なバグです。 OLE DB Sourceにドリルし、列タブをクリックして、エラーメッセージに含まれているAvailable External Columnを見つけ、チェックボックスをオフにして、エラーを解消しました。それを再確認します。エラーが解決しました!

77
Squ1rr3lz

既存のSSISパッケージで処理する必要のあるテーブルに新しい列を追加すると、「エラー出力に対応する出力がない」というバグに頻繁に遭遇しました。このバグは、「値が期待される範囲内にありません」というエラーメッセージとともに発生しました。

新しく追加された列は、既存のSSISパッケージで処理する必要がありました。予想される動作は、SSISが新しい列があることを認識し、処理するOLEDBソースタスクSSISの列ページでこの列を選択することです。ただし、テーブルを変更した後で初めてOLEDBソースタスクを開くと、次のエラーメッセージが2回表示されました。「値が期待される範囲内にありません。」エディターを開くとき、およびエディターの[列]ページを開くときに、エラーメッセージが表示されました。 OLEDBソースタスクの高度なエディター内で、新しい列がOLEDBソース出力列ツリーに表示されましたが、OLEDBソースエラー出力列ツリーには表示されませんでした。これは、エラーメッセージの実際の根本的な問題です。残念ながら、不足している列を手動で追加する方法はないようです。

この問題を解決するには、Jeffが述べたように、通常のエディターの[Columnns]ページで新しく追加された列を削除して再度追加します。

おそらく、OLEDBソースタスクのデータソースが変更されたMDSビューであったことは言及に値します。 Microsoft CRM Dynamicsもビューを使用しています。データソースとしてビューを使用すると、データ型を変更したり、列を追加または削除したりすると、上記のエラーが発生する可能性があるという結論に至りました。

関連スレッド: SSISの修正方法:「値、期待される範囲内にない」?

説明されている回避策は、Mircorsoft.NET Framework 3.5 SP1を適用したVisual Studio 2008バージョン9.0.30729.4462 QFEを参照しています。データベースはSQL Server 2008 R2(SP2)です。

2
Marcus Belz

私が間違っている場合は修正してください。ただし、ソースからデータを取得するときに[プレビュー]ボタンをクリックすると、列、特に文字列に対して誤った長さが設定されることがわかりました。
これは、取得したプレビューデータから長さが決定されるためと考えられます。したがって、ソーステーブルを選択した後、ソースダイアログの[列]タブをクリックすることをお勧めします。これは主にODBCソースの場合です。

0
RonVibbentrop