我正在使用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程序中捕获无效日期格式错误吗?
由于
答案 0 :(得分:3)
system()
只返回它调用的程序的退出状态。如果system()
返回0,则该程序退出该程序。对于那些指示错误然后exit()
具有非零状态的程序,通常被认为是礼貌的,但这绝不是强制执行的。可能只是程序设计不合理。
您可以做的一件事是捕获程序的STDOUT
和/或STDERR
流并查找特定模式,或者至少查找任何模式。如果在STDERR
上打印了任何内容,则可能会猜到发生了错误。
有关捕获这些内容的信息,请参阅IPC::Run,IPC::Open2或IPC::Open3。
答案 1 :(得分: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;