一部のデータフロータスクアイテムの実行が完了したら、一連のファイルをソースパスからアーカイブパスにアーカイブしようとしています。 Foreachループコンテナーの内部:スクリプトタスク->データフロータスク->実行SQLタスク->ファイルシステムタスク
Foreachループコンテナーのコレクション設定の下にある「名前と拡張子」項目にユーザー変数を設定しています。変数は "fileName"と呼ばれ、スクリプトタスク(ファイルから情報を解析してSQL実行タスクを実行するために使用)と、フラットファイル接続マネージャーのデータフロータスクの両方で使用されます。フラットファイルソース要素。次に、ファイルを解析し、データベースにデータを挿入します。ファイルシステムタスク(FST)に到達するまで、すべてが正常に機能します。
挿入が完了したら、ファイルをアーカイブフォルダに移動します。オンラインでいくつかのリンクを使用する( ここ 、 ここ および ここ )私は、ハードコードされているか、他の変数のマッサージから派生したさまざまな変数を追加しました。いずれにしても、FSTで「パス内の無効な文字」または「不明なパス」などのエラーが発生します。上記のリンク先の例をマッサージしてファイルシステムの構造に合わせると、指定したファイルが見つからないというデータフロータスクのフラットファイルソースのステップでエラーが発生します。これは、a)ファイルパスが指定されていないためファイルへのパスが見つからないために発生します。filname.extのみb)ソースファイルへの完全パスを含む変数を解析できません(@FullSourcePathFileName
@[User::SourcePath]
+ @[User::fileName]
に設定された値)
私が投稿した最初の例とまったく同じことを含め、他のさまざまな変更をテストしました(ただし、実際にはデータフロータスクを何も実行しないため、宛先のないフラットファイルソースステップを追加しただけです)、同じエラーのセットを受け取りました。私はここで途方に暮れていて、この問題を解決する方法についての入力をお願いします。
編集:FullArchivePathFileName
で失敗し続けるようです-'True'に設定しても、式は評価されません。それがなぜそれを評価していないのかについてまだ混乱しています。そこで、式をFullSourcePathFileName
と同じにして、EvaluateAsExpressionフラグがTrueに設定されていることを確認しました。それでもこの変数は評価されません。FullSourcePathFileName
変数は問題なく評価されています。
_SSIS 2005
_で作成された次の例は、指定されたフォルダーからCSVファイルを読み取り、SQLテーブルにデータを挿入します。データをSQLにインポートした後、ファイルシステムタスクを使用してファイルをアーカイブフォルダーに移動します。
ステップバイステッププロセス:
パスC:\ temp内にArchiveという名前のフォルダーを作成します。 File_1.csvおよびFile_2.csvという名前の2つのCSVファイルを作成し、データを入力します。 Archiveフォルダーは空のままにします。スクリーンショット#1-#4を参照してください。
スクリーンショット#5に示すように、SSISパッケージで5つの変数を作成します。変数RootFolderに値_C:\temp\
_を設定します。変数FilePatternに値_*.csv
_を設定します。
変数FilePathを選択し、F4キーを押してプロパティを開き、プロパティEvaluateAsExpressionをTrue
に変更して、式プロパティに値_@[User::RootFolder] + @[User::FileName]
_を設定します(スクリーンショット#6を参照)。
変数ArchiveFolderを選択し、F4キーを押してプロパティを開き、プロパティEvaluateAsExpressionをTrue
に変更して、式プロパティに値_@[User::RootFolder] + "Archive\\"
_を設定します(スクリーンショット#7を参照)。
SSISパッケージの接続マネージャーで、[〜#〜] csv [〜#〜]という名前の新しいフラットファイル接続を作成します。スクリーンショット#8を参照してください。スクリーンショット#9-#13に示すように、フラットファイル接続を構成します。また、OLEという名前のDB接続SQLServerを作成してSQL Serverデータベースに接続します。接続が作成されると、スクリーンショット#14のようになります。
スクリーンショット#15-#16に示すように、フラットファイル接続CSVを右クリックしてプロパティを選択し、省略記号ボタンを使用して値@ [User :: FilePath]でConnectionString式を構成します。
SQL Scriptsセクションで提供されるスクリプトを使用して、SQL Serverに_dbo.Items
_という名前のテーブルを作成します。 CSVファイルのデータがこのテーブルに挿入されます。
[制御フロー]タブで、スクリーンショット#17に示すように、_Foreach Loop container
_、_Data Flow Task
_、および_File System Task
_を配置します。
スクリーンショット#18-#19に示すように、Foreachループコンテナーを構成します。
データフロータスク内に、スクリーンショット#20に示すように、フラットファイルソース、派生列変換、およびOLE DB Destinationを配置します。
スクリーンショット#21および#22に示すように、フラットファイルソースを構成します。これにより、CSVファイルからデータが読み取られます。
スクリーンショット#23に示すように、派生列変換を構成します。これは、同じ名前の変数を使用してFilePath列の値を作成するために使用されます。
スクリーンショット#24および@ 25に示すように、OLE DB Destinationを構成します。これにより、SQLテーブルにデータが挿入されます。
[制御フロー]タブで、スクリーンショット#26に示すように、ファイルシステムタスクを構成します。 ファイルの移動操作中、DestinationVariable
はディレクトリとしてのみ指定でき、フルファイルパスとしては指定できないことに注意してください。ファイルパスを指定すると、エラーメッセージが表示されます_[File System Task] Error: An error occurred with the following error message: "Could not find a part of the path.".
_
スクリーンショット#28は、パッケージを実行する前のテーブルにデータがないことを示しています。
スクリーンショット#29および#30は、[制御フロー]タブと[データフロー]タブ内のパッケージ実行を示しています。
スクリーンショット#31および#32は、ファイルがアーカイブフォルダに移動されたことを示しています。
スクリーンショット#33は、パッケージ実行後のテーブルのデータを示しています。
ファイルシステムタスクで、プロパティOverwriteDestination
がFalseに設定されました(これがデフォルト値です)。同じ名前のファイルをArchiveフォルダーに移動すると、エラー_[File System Task] Error: An error occurred with the following error message: "Cannot create a file when that file already exists. ".
_がスクリーンショット#34に表示されます。これを回避するには、OverwriteDestinationをTrueに設定するか、他のオプションでファイルの名前を変更してアーカイブフォルダーにコピーしてから削除します。
お役に立てば幸いです。
SQLスクリプト:
_CREATE TABLE [dbo].[Items](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemNumber] [varchar](30) NOT NULL,
[Price] [numeric](18, 2) NOT NULL,
[FilePath] [varchar](255) NOT NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
_
スクリーンショット#1:
スクリーンショット#2:
スクリーンショット#3:
スクリーンショット#4:
スクリーンショット#5:
スクリーンショット#6:
スクリーンショット#7:
スクリーンショット#8:
スクリーンショット#9:
スクリーンショット#10:
スクリーンショット#11:
スクリーンショット#12:
スクリーンショット#13:
スクリーンショット#14:
スクリーンショット#15:
スクリーンショット#16:
スクリーンショット#17:
スクリーンショット#18:
スクリーンショット#19:
スクリーンショット#20:
スクリーンショット#21:
スクリーンショット#22:
スクリーンショット#23:
スクリーンショット#24:
スクリーンショット#25:
スクリーンショット#26:
スクリーンショット#27:
スクリーンショット#28:
スクリーンショット#29:
スクリーンショット#30:
スクリーンショット#31:
スクリーンショット#32:
スクリーンショット#33:
スクリーンショット#34: