バッチファイルからBCPを実行させようとしています。実行結果をERRORLEVELで取得してもし、失敗した場合は次の処理に進むのをやめたいのですが、ERRORLEVELには正常値が返ってきます。どなたか、似たようなことをやったことのある人がいらっしゃれば、教えていただきたいです。
ちなみにSQLServer2000です。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

>内容をプログラムでチェック


その通りです。

失敗したときの文言はほとんど決まっているので、それほどエラーパターンは存在しないと思います。
    • good
    • 1

-o オプションをつけて、ログを解析する方法もあります。

この回答への補足

それは、-oでbcpからのログを出力して、その内容をプログラムでチェックするということでしょうか?

補足日時:2005/02/01 10:08
    • good
    • 0

こういう処理の場合、bcpでエラーがでないようなつくりにしてます。

具体的にはワークテーブルを作成して、その列の型を文字列型にしておけば、まずエラーにはならないかと思います。

エラーハンドルを行うのは、このワークテーブルから実テーブルにデータを挿入するときに行ってます。
    • good
    • 0
この回答へのお礼

ありがとうございます。なるほど。そういう方法もありますよね。

お礼日時:2005/01/30 15:16

似たような事をしていますが、ログを吐いて、


そのログをfindstrでエラーを探してエラーを
ハンドリングしています。
納得行きませんけど。

この回答への補足

他に方法がなければ、私もその方法をとるつもりですが、やっぱり納得いきませんよねぇ。。

補足日時:2005/01/30 14:51
    • good
    • 0

BCPで無くてはいけないのですか?



SQLServer2000の他の機能では目的を果たせないの
でしょうか?

この回答への補足

DTSを使うという方法もありますが、それだと変換元ファイルの場所が固定になってしまいます。違うフォルダにあるデータを取り込みたいとき、DTSにすると定義をやり直す必要が出てきます。(変換元ファイルが固定長テキストなので、定義が大変。。)その点、BCPだとコマンドラインからファイル名を渡せるのでBCPでデータの取込を行いたいと思っています。

補足日時:2005/01/30 14:47
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q環境変数PATHをスクリプトかバッチから設定する方法

社内研修の準備のために、何台ものパソコン(Windows XPを想定)のセットアップを
行うことがありまして、
・ZIPファイルの展開
・展開後フォルダを特定の場所へ配置
・環境変数JAVA_HOMEとPATHの変更
などをバッチやJavaScriptを利用して自動的に処理させようと
しています。ZIPの展開と配置は解決できたのですが、
環境変数(pathなど)をスクリプトかバッチから設定できないでしょうか?

JavaScript(またはVBスクリプト)で次のように記述すると、
一見うまくいったように見えるのですが、レジストリが書き換わるだけで、
再起動しないとpathが有効になりませんでした。(スクリプト実行後に開いた
コマンドプロンプトで echo %path% をしても反映されていない。)

<setenvion.js>
var shell = WScript.CreateObject("WScript.shell");
shell.RegWrite("HKEY_CURRENT_USER\\Environment\\path",
"C:\\Program Files\\Java\\jdk1.6.0_06\\bin",
"REG_EXPAND_SZ");

googleで検索しても、バッチを実行するためにpathを設定しましょう、みたいな
情報しか見つからないので、質問させていただきました。
上記のスクリプトでも再起動すれば反映されるのでその点我慢すればよいのですが、
なにかよい方法をご存知の方、よろしくお願いします。

社内研修の準備のために、何台ものパソコン(Windows XPを想定)のセットアップを
行うことがありまして、
・ZIPファイルの展開
・展開後フォルダを特定の場所へ配置
・環境変数JAVA_HOMEとPATHの変更
などをバッチやJavaScriptを利用して自動的に処理させようと
しています。ZIPの展開と配置は解決できたのですが、
環境変数(pathなど)をスクリプトかバッチから設定できないでしょうか?

JavaScript(またはVBスクリプト)で次のように記述すると、
一見うまくいったように見えるのですが、レジスト...続きを読む

Aベストアンサー

スクリプトでもバッチでも

http://www.atmarkit.co.jp/fwin2k/win2ktips/460envset/envset.html
http://www.atmarkit.co.jp/fwin2k/win2ktips/1003setx/setx.html

QSELECT結果の16進表示の相違(SQLServer2005 vs 2000)

SQLServer2000で項目値"123"のA項目をSELECTした結果をファイル出力した場合(SELECT A from テストテーブル)
処理結果ファイルを16進で表示すると ""31 32 33""
ですが
SQLServer2005で同様に結果をファイル出力した場合、"31 00 32 00 33"のように1バイトごとにnull(""00"")が挿入されてしまいます。

この事象を回避する方法をご存じの方ご教示いただけないでしょうか?

Aベストアンサー

見た感じですと2005はUnicodeでデータが入っているのではないでしょうか?
ASCII指定とかできないのでしょうか?

Qバッチファイルで、あるスクリプトがエラーになっても、つぎのスクリプトを実行させたい

バッチファイルで、あるスクリプトがエラーになっても、つぎのスクリプトを実行させたいと考えています。
具体的には、
■call.bat■
******************
call 1.bat
call 2.bat
******************


■1.bat■
******************
mkdir test1
******************

■2.bat■
******************
mkdir test2
******************

の3つのバッチファイルで、1.batがエラーになっても
2.batを実行させたいと考えています。
どうしたらいいのでしょうか。

よろしくお願いします。

Aベストアンサー

>1.batが終了しなくても、
>2.batを実行させたいと考えています。

なるほど。簡単そうに出来るのは
start cmd /C 1.bat
start cmd /C 2.bat
ですかね。

QSQLServer(MSDE) JOBの状態取得、実行終了を待機

MSDEを使用しています。
ジョブで、DTSを定期的に実行しています。

このジョブを、EXEC sp_job_start @job_name ='JOBNAME' で実行させたいのですが下記方法が分からなくて大変困っています。

(1)JOBが起動中だったら実行したくない
(2)JOBの実行終了を待って、他のJOBを起動したい

コマンドは、Access(adp)を使用して実行したいです。
ヒント等いただけるととても助かります。

Aベストアンサー

EXEC msdb..sp_help_job @execution_status=1
を実行して、返ってきたもののname列をチェックするのが一番簡単ではないかと思います(current_execution_status=1は「実行中」)。

Qcmdの起動時におけるバッチスクリプトの自動実行

こんにちは。

OSは現在、64bit版のWindows7を使っています。
コマンドプトンプト(C:\Windows\System32\cmd.exe)の実行時に、
自動で実行するバッチスクリプトを設定するには、
レジストリキーの
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
に、AutoRunという文字列値を作成し、そのデータに、バッチスクリプトのパスを記述します。
以前までこの方法で、
C:\Users\kei\cmdprofile.bat
というバッチスクリプトが、コマンドプロンプトの起動時に呼び出されるように設定していました。
最近、これを実行しないようにしようと思い、
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
に、AutoRunという文字列値を削除しました。
ところが、依然と同じように、C:\Users\kei\cmdprofile.batが、コマンドプロンプトが起動する度に実行されてしまいます。
そこで、バッチスクリプトの名前をprofile.batに変更してコマンドプロンプトを起動させた所、
「C:\Users\kei\cmdprofile.bat は存在しない」
といったエラーメッセージが表示されました。
どうやら、C:\Users\kei\cmdprofile.batを自動実行する設定が解除されていないようなんです。
一体どうすれば、このバッチスクリプトの自動実行を解除する事ができるのでしょうか?

何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。
では、よろしくお願い致します。

こんにちは。

OSは現在、64bit版のWindows7を使っています。
コマンドプトンプト(C:\Windows\System32\cmd.exe)の実行時に、
自動で実行するバッチスクリプトを設定するには、
レジストリキーの
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
に、AutoRunという文字列値を作成し、そのデータに、バッチスクリプトのパスを記述します。
以前までこの方法で、
C:\Users\kei\cmdprofile.bat
というバッチスクリプトが、コマンドプロンプトの起動時に呼び出されるように設定していました。
最近、これを実...続きを読む

Aベストアンサー

ANo2です。

激動たる俺RegEdit改でも通常のRegeditでもOKですがAutRunではなく
パスの記述 C:\Users\kei\cmdprofile.bat
を検索してみてはいかがでしょうか?

QSQLSERVERエージェントからのストアド実行方法について

いつもお世話になります。
表題の件ですが、当方オラクル育ちの為四苦八苦しながらの開発です。

とりあえずストアドの作成、登録、クエリアナライザーからの実行、デバックまでは完了しており
最終的にSQLSERVERエージェントのジョブ登録にて毎日設定した時間に作成したストアドを実行したいと思っているのですがエージェントからストアドを起動させるステップのコマンド記述が良く分からないのです。

exec aaa (パラメータ無しです)
と書いて実行しても
”ジョブは失敗しました。 ジョブは ユーザー sa が起動しました。最終実行ステップはステップ 1 (ステップ 1) でした。”
というメッセージが表示されます。

エージェントから起動する場合、どのようにコーディングすればいいのでしょうか?

開発環境はsqlserver2000です。

申し訳ありませんが宜しくお願いします。

Aベストアンサー

「exec aaa」とクエリアナライザで実行した場合はうまくゆくのですよね?

以下、手元にSQL Serverがあるわけでないので、細かい操作は違うかも・・・

Enterprise Manager 上でジョブ名を右クリック→履歴の表示で実行履歴が出ます。
そこで詳細の表示にチェックを入れ、展開された部分を参照してみてください。エラー原因が出ているかもしれません。

確認点としては、
・[種類]が[Transact-SQL スクリプト (TSQL)]になっているか?
・[データベース]でストアドプロシージャを作成したデータベースが指定されているか?
といったところでしょうか。

参考URL:http://www.microsoft.com/japan/msdn/library/ja/adminsql/ad_automate_3v5f.asp?frame=true#

Qバッチかスクリプト

こんにちは、早速ですがある共有フォルダ内にあるフォルダやファイルを一発で消せるバッチ又はスクリプトの書き方を教えてください(もちろんアクセス権は有効である条件のもとで)。ちなみにOSはNT4.0です。

Aベストアンサー

こんにちは、honiyonです。

 ありゃ、ほんとですね(^^;

 では、rmdir を使用しましょう。

  rmdir /s [DIR名]

 とします。
 削除確認のメッセージを表示させない場合は、更に /q を付け足せばOKです。
 ヘルプは、rmdir /? で出ます。

 今度はフォルダが消えている事を確認出来ました。(Win2000の場合)

 参考になれば幸いです(..

QSQLServer2000で.NETからクエリを実行していますが、

SQLServer2000で.NETからクエリを実行していますが、
実行したクエリ文と実行時間のログを取得したいのですが、
どのように取得したらいいのでしょうか?

EnterpriseManagerなどで簡単に取得できたらいいのですが。

Aベストアンサー

SQLプロファイラ
http://www.atmarkit.co.jp/fwin2k/tutor/sql02/sql02_04.html

Qバッチスクリプトについて

現在OSはXPを使用しています。

iPodビデオを作る際、音量がファイル枚に不均一のため、Sound Engine Free ver.2.96bのオートマキシマイズで均一化をしてます。
ちなみに13dBに設定してます。

wavファイルの読み込みでプログラムがwavを読んで波形が出るところまでのスクリプトなら書けるのですが、
変換するファイル数が膨大にあるため、読み込みの後、オートマキシマイズで均一化、変更の保存、プログラム終了まで自動で行うバッチスクリプトが書きたいのですが、検索してもいまいち分かりませんでした。
どなたかご教授願います。
手動でやるしかないなら諦めて1ファイルずつ変換していきます…。

Aベストアンサー

ハードリンクというのは「既存のファイルに対する別名」です. つまり, 「別名」を作ることで 1つのフォルダにすべてのファイルを集めてしまい, そのフォルダに対して Foler Open などを使ってやろうという趣旨です.
以下, すべてはコマンドプロンプトで実行することになります:
[注意]
実際に実行するとファイルを破壊してしまったりするかもしれません. 特に, ハードリンクを作ったり削除したりすることになるので, 「元のファイルが変更できていない」「元のファイルごと削除してしまった」などの問題が発生する可能性は否定できません. あらかじめバックアップをとるなどして「壊れてしまっても大丈夫」という状況にしてから実行することをお勧めします.
[注意終わり]
まず,
for /r d:\ipod %f in (*.wav) do echo %f
とやると「d:\ipod 以下にあるすべての wav ファイル」が表示されるはずです.
そこで, (fsutil を実行するので管理者権限が必要かもしれません) 以下のコマンドを順次実行します:
d:
cd \
mkdir hogehoge
cd hogehoge
cmd /v:on
set i=1
for /r d:\ipod %f in (*.wav) do fsutil hardlink create "%f" !i!.wav & set /a i=!i!+1
この時点で, d:\ipod にあるすべての wav ファイルに対し, カレントフォルダ (d:\hogehoge) の中にハードリンクが作られます.
そこで, SoundEngine のスクリプトから Folder Open などを使って「カレントフォルダにあるすべての wav ファイル」をオートマキシマイズします. これで, 原理的には「d:\ipod 以下にあるすべての wav ファイルに対してオートマキシマイズした」のと同じ結果になっているはずです.
あとは
del *.wav
cd ..
rd hogehoge
exit
で証拠隠滅.
上の [注意] でも書きましたが, ここで「ファイルの削除」を行っているため最悪の場合「元のファイルをすべて消してしまった」ということになるかもしれません. 私は試していないので, 「これでいける」とまではいえません. ファイルの少なそうなフォルダをコピーしておき, そのコピーに対して同じようなことをして「ちゃんと動いている」ことを確かめてから本来の対象に対して実行することを強くお勧めします.

ハードリンクというのは「既存のファイルに対する別名」です. つまり, 「別名」を作ることで 1つのフォルダにすべてのファイルを集めてしまい, そのフォルダに対して Foler Open などを使ってやろうという趣旨です.
以下, すべてはコマンドプロンプトで実行することになります:
[注意]
実際に実行するとファイルを破壊してしまったりするかもしれません. 特に, ハードリンクを作ったり削除したりすることになるので, 「元のファイルが変更できていない」「元のファイルごと削除してしまった」などの問題が発生...続きを読む

QSQLServer2005のストプロでxp_cmdshellを使いvbsファイルを実行できない

ストプロ内でxp_cmdshellを使用し、vbsファイルを実行したいのですが実行できません。
vbsファイルはxp_cmdShellでキックされたらSQLサーバのデータをSELECTし、テキストファイルにSELECTで取得した行数だけ行を追加するという内容です。
vbsファイルはコマンドプロンプトから実行すると動くので正しいと思います。

ストプロにはvbsファイル実行の前後にtableのupdate作業があり、
その2つは行われます。しかし、書き出されるはずのデータがテキストファイルに書き出されません。
vbsファイルは実行されていないようですがエラーは出ず正常終了となり、
xp_cmdshell実行後の戻り値は0で成功となっています。
xp_cmdshellオプションは有効になっており、は混合モードでSysAdminの権限を持つユーザーで処理をしています。

また、ストプロではなく、SQLServerManagementStudioから下記のようにvbsファイル実行しようとした場合、エラーなく正常終了するのですがテキストファイルにデータは追加されていません。
 EXEC @result = xp_cmdshell 'Cscript c:\AddRow.vbs'
しかし、EXEC xp_cmdshell 'dir *.exe'は実行できます。

vbsファイルをxp_cmdshell で実行するときは何か特殊な記述が必要なのでしょうか。何がいけないのかわからず困っております。お気づきのことがありましたらご指摘いただけますようお願い致します。
以下にストプロの中身をを記述します。


BEGIN

  SET NOCOUNT ON;

-- テーブルのアップデート処理
  UPDATE table1 SET Status = 1
  WHERE Status = 0

--ファイル書き出しvbsの実行
  DECLARE @result int
  SET @result = 1
  EXEC @result = xp_cmdshell 'Cscript c:\AddRow.vbs'
--ここは下記のようにCscriptを抜いても試しましたがだめでした。
--EXEC @result = exec master..xp_cmdshell 'c:\AddRow.vbs'

  IF (@result = 0)
  BEGIN
--xp_cmdshellの実行が成功したときのみこの処理に入る予定。
--実際は実行されていないようだが@result が0なのでこの処理を行っている。
    UPDATE table1 SET Status = 2
    WHERE Status = 1
  END
END

ストプロ内でxp_cmdshellを使用し、vbsファイルを実行したいのですが実行できません。
vbsファイルはxp_cmdShellでキックされたらSQLサーバのデータをSELECTし、テキストファイルにSELECTで取得した行数だけ行を追加するという内容です。
vbsファイルはコマンドプロンプトから実行すると動くので正しいと思います。

ストプロにはvbsファイル実行の前後にtableのupdate作業があり、
その2つは行われます。しかし、書き出されるはずのデータがテキストファイルに書き出されません。
vbsファイルは実行...続きを読む

Aベストアンサー

当たり前ですが、このvbsはSQL Serverのサービスが実行します。

つまりSQL Serverのサービスを動かしているプロセスがvbsを実行出来なければいけません。もちろん、書き込みを行なうテキストファイルに対する権限も必要です。

「SQL Server構成マネージャ」でサービスを動かしているユーザを確認してください。このユーザでvbsが実行できるようにしてください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング