-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 程序中捕获 Invalid Date Format 错误?

谢谢

4

2 回答 2

3

system()只是返回它调用的程序的退出状态。如果system()返回 0,那么这就是程序退出的原因。exit()对于以非零状态指示错误的程序,通常认为这是礼貌的,但这绝不是在任何地方强制执行的。可能只是程序设计不当。

您可以做的一件事是捕获程序STDOUT和/或STDERR流并寻找特定的模式,或者至少是任何东西。如果上面印有任何内容,STDERR则很可能猜测发生了错误。

有关捕获这些的信息,请参阅IPC::RunIPC::Open2IPC::Open3

于 2012-04-18T14:51:57.937 回答
0

您应该通过以下方式将 STDERR 重定向到 STDOUT 2>&1

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 回答