私はこの問題の修正に何時間も費やしました。問題を引き起こしている列については、SQLサーバーのスカラー関数を使用して名前を取得しています。関数は正しく、正常に動作します。次に、ストアドプロシージャを使用してssisで使用します。エラーが発生している列は、エラー出力に対応する出力列がないことを示しています。すべてが元気なようです。以前の推奨事項に従って、次のことを行いました。
これらは、以前のフォーラムによる推奨事項でした。
私はインターンであり、マネージャーに依頼することなく自分でこれを取得したいと考えています。私は問題を解決するために無数の時間を費やしてきました。
助言がありますか?
以下は、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
どうやら、これはSSISパッケージの一般的なバグです。 OLE DB Sourceにドリルし、列タブをクリックして、エラーメッセージに含まれているAvailable External Columnを見つけ、チェックボックスをオフにして、エラーを解消しました。それを再確認します。エラーが解決しました!
既存の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)です。
私が間違っている場合は修正してください。ただし、ソースからデータを取得するときに[プレビュー]ボタンをクリックすると、列、特に文字列に対して誤った長さが設定されることがわかりました。
これは、取得したプレビューデータから長さが決定されるためと考えられます。したがって、ソーステーブルを選択した後、ソースダイアログの[列]タブをクリックすることをお勧めします。これは主にODBCソースの場合です。