1

そこで、SSISパッケージのDBソースクエリを更新しました。しかし今、パッケージは宛先で失敗します。デバッグでは、次の出力が得られます。

The file name property is not valid. The file name is a device or contains invalid characters.

No destination flat file name was provided. Make sure the flat file connection manager is configured with a connection string. If the flat file connection manager is used by multiple components, ensure that the connection string contains enough file names.

私が調査できたことから、日付変数が適切にキャストされていないと思います。式(FileLocation変数を除く)に触れておらず、正しく評価されるため、これは混乱を招きます。

式は次のとおりです。

@[User::FileLocation]  + "\\GRADE_" + Right((DT_STR,4,1252) DatePart("yyyy",getdate()),2) +
Right("0" + (DT_STR,4,1252) DatePart("m",getdate()),2) +
Right("0" + (DT_STR,4,1252) DatePart("d",getdate()),2) + "_" + 
Right("0" + (DT_STR,4,1252) DatePart("Hh",getdate()),2) + 
Right("0" + (DT_STR,4,1252) DatePart("Mi",getdate()),2) + 
Right("0" + (DT_STR,4,1252) DatePart("Ss",getdate()),2) + 
Right("0" + (DT_STR,4,1252) DatePart("Ms",getdate()),2) + ".txt"

提案されているように、変数をに設定しましEvaluatedAsExpressionTrueが、役に立ちませんでした。

変数を使用する代わりにフォルダーパスをハードコーディングしようとしましたが、問題は解決したようです。しかし、構成可能な変数を使用する必要があります。どうした?

アップデート:

使用していた変数のスコープが別のパッケージに含まれていることに気付きました。スコープ外の変数を表示するにはどうすればよいですか?正しいパッケージを強調表示して、パッケージレベルの変数を作成しようとすると、そのスコープは別のパッケージとして割り当てられますか?

ここに画像の説明を入力してください

4

2 に答える 2

2

あなたが直面している問題は、既存のパッケージをコピーして新しいパッケージを作成することによるものです。この例は、あなたのケースで何が起こったかを示しています。

パッケージ変数スコープで何が起こっているかを説明するために、新しいSSIS2008R2ソリューションを作成しました。新しいプロジェクトソリューションを作成すると、デフォルトでは、という名前の新しいパッケージも作成されますPackage1.dtsx。パスにパッケージソリューションを作成しましたC:\temp\SSIS.2008R2

パッケージソリューション

プロジェクトフォルダの場所に移動すると、パッケージファイルが表示されます。dtsxファイルを右クリックして、メモ帳またはメモ帳++で開きます。私はNotepad++が好きです。ファイル内を検索しObjectNameます。パッケージのObjectNameはPackage1であり、ファイル名と同じであることがわかります。したがって、BIDSはパッケージとファイルの両方に同じ名前を付けます。ただし、両方が同じ名前である必要はありません。

ObjectName-1

ここで、パッケージの名前を「」に変更してみてくださいInquiryFile.dtsx。パッケージの名前を変更すると、BIDSは次の警告メッセージをスローします。BIDSは、パッケージの名前を変更しようとしていることを通知しようとしています。これにより、オブジェクト名がファイル名と同期しなくなる可能性があります。名前を変更しますか。このパッケージでは、「はい」としましょう。パッケージを保存します。

名前を変更-1

プロジェクトフォルダの場所に戻り、テキストエディタでdtsxファイルを再度開きます。を検索するObjectNameと、オブジェクト名がに変更されてInquiryFileいることがわかります。これは、パッケージの名前を変更するために付けた名前だからです。

オブジェクト名の名前が変更されました

ここで、プロジェクトソリューションに戻ります。パッケージInquiryFile.dtsxをコピーし、SSISパッケージノードに貼り付けて、新しいパッケージを作成します。パッケージの名前は次のようになりますInquiryFile 1.dtsx

新しいパッケージ

この新しい変数にパッケージ変数を作成しようとするとInquiryFile、パッケージファイルを開いていてもスコープがであることがわかりますInquiryFile 1.dtsx。それはあなたを完全に失望させるかもしれません。

新しい変数

スコープが設定されているのに設定されInquiryFileていないのはなぜInquiryFile 1ですか?それを見つけるには、プロジェクトフォルダの場所に移動する必要があります。今回は、テキストエディタでファイルInquiryFile1.dtsxを開きます。既存のファイルInquiryFile.dtsxをコピーしてこのパッケージを作成したため、ObjectNameはまだInquiryFileに設定されていることがわかります。BIDSはファイルの名前を変更するだけで、ファイル内のオブジェクト名は変更しません。

[変数]ペインに表示されるスコープは、実際にはファイル名ではなくオブジェクト名です。

名前を変更

BIDSプロジェクトソリューションに戻り、ファイルの名前をに変更しましょInquiryFile 1.dtsxGradeFile.dtsx。次の警告が表示されたら、必ず[はい]をクリックしてください。

警告の名前を変更

パッケージを保存して閉じます。ここで、パッケージを再度開くと、[変数]ペインの[スコープ]が表示されますGradeFile

新しいスコープ

これは、ファイルの名前を変更したときに、[はい]をクリックしてオブジェクトの名前も変更したためです。プロジェクトソリューションフォルダーに移動し、テキストエディターでファイルを開いGradeFile.dtsxて、オブジェクト名の名前が正しく変更されていることを確認できます。これは、[変数スコープ]セクションに表示されるオブジェクト名です。

スコープがどのように機能するかを理解できるようになることを願っています。

問題を解決するには、パッケージの名前を変更してみてください。オブジェクト名の名前を変更するように求められたら、必ず[はい]をクリックしてください。

名前を変更

于 2012-10-31T15:42:30.510 に答える
1

問題の根本的な問題(変数と関係があると思います)は見つかりませんでしたが、同僚は回避策を見つけました。

Sivaが彼女の答えで与えた指示に従った後(これは私の変数の範囲を修正しましたが、問題を解決しませんでした):

私の同僚は、いくつかの追加の文字列変数を作成しました。1つはフォルダーのパスを含み、もう1つはファイル名を評価しました。彼はまた、パッケージの最初にスクリプトタスクを作成し、それらの2つの変数を3番目の変数に結合しました。

次に、宛先接続で、接続文字列式に最終的な連結変数が含まれます。Voilà、宛先ファイル名が受け入れられ、パッケージが正常に完了しました。

于 2012-11-02T19:31:38.290 に答える