-1

Perl プログラムで BCP ユーティリティを使用して SQL Server にファイルをインポートしています。インポートしているファイルの日付形式が間違っているため、インポート プロセスが次のエラーで失敗します。

SQLState = 22008, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Invalid date format

perl プログラムで次のように bcp コマンドを実行しています。

my $myBcp = "bcp.exe" <table name> in <temp file path> -f<format file> -m 1 -h "FIRE_TRIGGERS" -o<log file path>
my $myResult = system($myBcp);

印刷$myResultすると「0」になります。「無効な日付形式」エラーがあるため、エラー コードが返されるはずです。

私のperlプログラムで無効な日付形式エラーをキャッチする方法を教えてもらえますか?

ありがとう

4

2 に答える 2

3

system()呼び出したプログラムの終了ステータスを返すだけです。system()が 0 を返す場合、それはプログラムが終了したものです。exit()エラーをゼロ以外のステータスで示すプログラムは一般的に礼儀正しいと考えられていますが、これはどこにも強制されているわけではありません。プログラムの設計が不十分である可能性があります。

あなたができることの1つは、プログラムSTDOUTSTDERRストリームをキャプチャして、特定のパターン、または少なくとも何かを探すことです。何かが印刷されている場合はSTDERR、エラーが発生した可能性があります。

それらをキャプチャする方法については、IPC::RunIPC::Open2またはIPC::Open3を参照してください。

于 2012-04-18T14:51:57.937 に答える
0

2>&1次のようにして、STDERR を STDOUT にリダイレクトする必要があります。

my $myBcp = '"bcp.exe" <table name> in <temp file path> -f<format file> -m 1 -h "FIRE_TRIGGERS" -o<log file path>';
my $myResult = `$myBcp 2>&1`;
print $myResult;
于 2012-04-18T14:44:32.970 に答える