DTSでデータソースのファイル内容が0件の場合、次の処理に進みたい

このQ&Aのポイント
  • SQLserver2000のDTSを利用して、ファイルの内容をDBに取り込む処理を行っています。
  • 1つ目のデータソースのファイルが0件の場合、「データファイルマッピング作成時のエラー」となり、パッケージが終了します。
  • 1つ目のファイルが0件の場合でも、次のファイル取り込みに進む方法はありますか?
回答を見る
  • ベストアンサー

DTSでデータソースのファイル内容が0件の場合、次の処理に進みたい

いつもお世話になっております。 SQLserver2000のDTSを利用して、ファイルの内容をDBに取り込んでいます。 このパッケージでは、2つのファイルを取り込む処理を行っているのですが、 1つ目のデータソースのファイルが0件の場合、 「データファイルマッピング作成時のエラー:  ファイルを格納しているボリュームが外部的に変更された為、  開かれているファイルが無効になりました。」 というエラーとなり、そこでパッケージが終了します。 できれば、1つ目のファイルが0件なら、次のファイル取り込みに進みたいのですが、 実現する方法はありますでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

DTSはSSISとは違って、コンテナもないし、Or条件で後続を指定することもできないので、通常はデータフローのActiveX設定で「実行しない」にするなどでステップをスキップしようとすると、後続の処理も実行されないで終わってしまいます。 したがって、前提後続を維持したままでどうしてもスキップを実装したい場合は以下のようにします。 1)1つ目のファイル取込の前にActiveXスクリプトタスクを置き、以下の処理を記述する Function Main()  Set fso = CreateObject("Scripting.FileSystemObject")  Set f = fso.OpenTextFile("対象ファイル")  If f.AtEndOfStream Then   Set oPkg = DTSGlobalVariables.Parent   oPkg.Steps("1つ目のファイル取込のステップ名").ExecutionStatus=DTSStepExecStat_Completed  End If  f.Close  Set f = Nothing  Main = DTSTaskExecResult_Success End Function 2)2つ目のファイル取込との間のワークフローを「成功」ではなく「完了」にする 見ての通りで、ファイルが空かどうか調べ、空の場合はファイル取込のステータスを先に「完了」に変更してしまいます。 (「成功」にしようとするとうまくいかない可能性があるので、上記でお勧めしておきます)

kudakuda88
質問者

お礼

ご回答ありがとうございます! お恥ずかしい程の知識不足で、最初、ステップ名の指定をどうするのか迷いましたが ワークフローのプロパティに表示される名前を指定してやって成功しました! 本当に 本当にありがとうございました。 これで思うように処理できそうです!!

関連するQ&A

  • DTSパッケージを使ってTableから画像ファイルを取り出したい

    古いデータベースに格納されている画像ファイル・ドキュメントファイルを取り出したいと思っています。 DTSインポートエクスポートを使って、テキストテーブルからの取り出し・保存は成功しました。 でも、画像やPDFファイルが格納されているDBはどうやって取り出して保存すればいいのでしょうか? おそらく、エクスポート対象のDBを選択した後に表示される「変換先の選択」で設定するのだろうとは思うのですが・・・ DTSパッケージもあまり使ったことがなかったので大雑把すぎる質問かと思いますが、よろしくお願いいたします。

  • DTSのデータ変換タスクで入力にゼロ件のファイルを指定するとエラーになる

    SQLserver2000のDTS実行結果を、VB6.0で作成したアプリで 「sp_help_job」を使用して取得し、画面表示しています。 DTSのデータ変換タスクで、csvデータをテーブルに ロードしているのですが、csvデータがゼロ件だと DTSが異常終了となってしまいます。 業務の都合上、あるタイミングではcsvデータが ゼロ件になることがあり、この場合は正常終了としたいのですが、 例えば最後のタスクまで到達した場合は、 途中のタスクに異常があってもDTSの処理結果を 正常終了とするようなことは出来ないでしょうか?

  • CSV形式のファイルを読み込んでテーブルに格納するには?(BULK INSERT、BCP、DTS)

    VisualBasicのカテゴリでも質問したのですが、 こちらの方が回答がつく可能性が高いのではと思い、こちらにも書き込みました。 今、 "aaa","bbb","ccc"  のような形で1レコードのCSVファイルがあります。 これをSQLServer2000上のテーブルに読込みたいのですが、 10件ほどの少ないレコードなら 各フィールドごとを変数に入れて読込み、 それをループさせてINSERT INTO すればよいのですが・・・。 大量の件数の場合時間がかかりすぎてしまいます。 それで、BULK INSERT、BCP、DTS などの利用を考えているのですが、 まず、何よりこの質問です。 (1)このようなファイル形式のものを上記の方法で読込めるのか? 実現可能なのかをまずお聞きしたいです。 どなたか、成功されている方はいらっしゃいますか? (2)BCPでファイルのフォーマットを指定したファイルを用意して試みたところ、 ""で区切られているため、その部分もフィールドに取り込まれてしまい、 binaryデータが切り詰められましたとなってしまいます。 この回避方法はないでしょうか? (3)""が余計なので、これを変換して読込むことは可能ですか? DTSはVisualBasic上からコマンドとして利用したいです。 batファイルを用意してもいいです。 困っています。どなたか助けてください。

  • DTSパッケージでテキストファイルのインポート

    SQLServer2000で、DTSパッケージを使ってテキストファイルをインポートしているのですが、インポート先テーブルに主キーを設定していないためか、インポートするたびにレコードの順番が変わってしまいます。 例) テキストファイル fld1|fld2|fld3 1111|AAAA|aaaa 2222|BBBB|bbbb 3333|CCCC|cccc SQLServerのテーブル fld1|fld2|fld3 2222|BBBB|bbbb 3333|CCCC|cccc 1111|AAAA|aaaa のようになってしまいます。 これをテキストファイル通りのレコード順でインポートするにはどうすればいいのでしょうか? ちなみに実際のファイルにはソートをかけられるフィールドはありません。 よろしくお願いします。

  • dtexecコマンドを使ってDTSパッケージを実行する方法

    SQLサーバー2005でdtexecコマンドを使って DTSパッケージを実行する方法について質問です。 SQLサーバー2000から移行したDTSパッケージを、 dtexec /DTS 「パッケージ名」 /SERVER 「サーバー名」 とコマンドラインから実行しましたが パスが無効です、というエラーになってしまいます。 SSISへ格納したパッケージを実行するには、引数/DTSの部分を どのように指定すればよいのでしょうか。

  • ファイルまたはフオルダのコピーエラー

    CIMG0082をコピーできません、フアイルを格納しているボリュームが外部的に変更されたため、 開かれているファイル無効になりました、 エラー発生 0x00000003    アクセス拒否 0x00000005 などが出ます、 Thumbs     Data baes File 参考は上記です、 カメラよりPCに取り込み、CDに書き込み時に、操作を間違えていると思います、上記エラーを 直す方法を教えてください。よろしく

  • データファイルのソート方法について

    perlで使用している、データファイルのソート方法について質問いたします。 やりたいこと。 1.ファイルを読み込み 2.指定されている文字列でソートをして 3.同じファイルに格納する 以上になります。 以下のファイルにデーターが入ってます・ namedata.cgi 田中,4 佐藤,2 鈴木,1 水野,3 このファイルをソートして以下のように並び替えて保存したいと思ってます。 スクリプトを実行後 namedata.cgi 鈴木,1 佐藤,2 水野,3 田中,4 となっていてほしいのです。 スクリプト sort.cgi 略・・・ #ふぁいる読み込み open(DB,"<$file") || &error("Can't write $file"); flock(DB, 1); @lines = <DB>; close(DB); #ソート @result = sort { $a <=> $b } @lines; #ファイル書き込み open(DB,">$file") || &error("Can't write $file"); flock(DB, 2); print DB "@result"; close(DB); ファイルの2項目目が分からないからソートされていないような気がするのですが、記述方法がわかりません。 ファイル読み込み時にforeachを使用して読み込まないとだけなのでしょうか? うまく説明できていないかもしれませんが、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • OSがウィンドウズ7で、ネクソン社のアスガルドというMMOをするため、

    OSがウィンドウズ7で、ネクソン社のアスガルドというMMOをするため、ソフトをダウンロードして起動しようとしたところ、「Win32error ファイルを格納しているボリュームが外部的に変更されたため、開かれているファイルが無効になりました。」というメッセージが出てそれ以上すすみません。 どのように対処したらよいのでしょうか。パソコンのことはあまりよく知りません。よろしくお願いします。

  • SQL2008から2000へデータコピーしたい

    使用環境は DB SQL Server2008 Express 使用ツールは Microsoft SQL Server Management Studio です サーバーは 64bit です インストールファイルは SQLEXPRWT_x64_JPN.exe です 現在、同じネットワーク上には SQLServer 2000のDBを使ったサーバーはあるので すがSQLServer2008は1台だけです 今回 SQL2008のDBを 2000の方にバックアップ用としてコピーしたいと思います ファイルの保存だけであれば可能かと思いますが 万が一の時に 接続先を変更して使えるようにしたいと思います。 認識として、 ・データファイルやログファイルは上位DBから下位DBへアタッチ操作はで きない (上位DBのファイルを下位DBがアタッチ操作できない) ・データベースコピーはできない そこで データコピー をしたいと思っています。 下記 HPを参考にフリーソフト(DBCopyTool.exe)を使ってみたのですが http://www.atmarkit.co.jp/fdotnet/dotnettips/859dbcopytool/dbcopytool.html サーバーの登録はうまくいくのですが、対象DBの登録について SQLServer2008express や SQLServer2005express はうまくいくのですが SQL2000のサーバーでは、下記メッセージが出てきます Fehler:Error getting the database.オブジェクト名'sys.database'は無効です 確認したいのは 上記フリーソフトを使われたことがある方、同じような現象には ならないかどうか 何か設定、確認不足なのでしょうか? また当初の希望内容を実現するため、他の方法があれば ご教授願いたいと思いま す。 同HP内の文末に、SQLServer 2000とSQL Server 2008との間でコピーが正しく行え た とあり決して依存するわけではないのですが、もしやと思い試しているのですがうまくい きません。 仮に 2000のDBを2008にコピーできるとしても、該当DBの選択のところでエラーが 出てしまうのはクリアする必要があると思うのですが… 以上 宜しくお願い致します。

  • Excelマクロからのバイナリデータ取得について

    初めて質問します。 SQLServerにvarbinary(MAX)型で写真データが格納されています。 その写真データをExcelマクロの処理にてシートに貼り付けたいと考えています。 手順として、 (1)バイナリデータを復元し、ファイルを任意のディレクトリに格納。 (2)格納した画像ファイルを指定したセルに貼り付ける。 (1)の手順からつまづいており、先へ進めません。 実現方法はあるのでしょうか?