我想在一个批处理文件/脚本中逐个执行15个“bcp命令”。 只有在成功执行上一个命令后,才能处理或执行每个命令。 如果在任何情况下命令都无法执行......脚本应该停止执行...
我试过这个..但我没有得到足够的输出我需要的东西..
staticFileLocation("/public");
答案 0 :(得分:0)
我认为您缺少的是整个脚本停止了。您目前的pause
命令暂时保存脚本,但不保存完整脚本。
您应该使用标签跳转到。在下面的脚本中,我添加了标签:error_happened
,以防出现错误。如果没有错误,则命令goto :EOF
将跳过:error_happened
标签。
bcp.exe "select * from OrderXpress.dbo.Customers where CustId < 1000" queryout "D:\Customer.dat" -S localhost -U sa -P Sa12345 -E -n
IF ERRORLEVEL 1 GOTO error_happened
bcp.exe OrderXpress.dbo.Customers out "D:\Customer2.dat" -S localhost -U sa -P Sa12345 -E -n
IF ERRORLEVEL 1 GOTO error_happened
bcp.exe OrderXpress.dbo.Orders out "D:\Orders.dat" -S localhost -U sa -P Sa12345 -E -n
IF ERRORLEVEL 1 GOTO error_happened
goto :EOF
:error_happened
echo,
echo An error has occurred. Script stopped
echo
pause
但是必须针对BCP产生的错误级别进行说明。如果没有正确导出数据行,那么我不确定错误级别会发生什么。我知道在导入时出现行错误不会导致问题。另请参阅:https://groups.google.com/forum/#!topic/microsoft.public.sqlserver.tools/qzpWuZzJnr4
我有使用-e参数检查错误的解决方法。该脚本将是:
bcp.exe "select * from OrderXpress.dbo.Customers where CustId < 1000" queryout "D:\Customer.dat" -e errors.txt -S localhost -U sa -P Sa12345 -E -n
IF ERRORLEVEL 1 GOTO error_happened
call :check_errorfile
bcp.exe OrderXpress.dbo.Customers out "D:\Customer2.dat" -e errors.txt -S localhost -U sa -P Sa12345 -E -n
IF ERRORLEVEL 1 GOTO error_happened
call :check_errorfile
bcp.exe OrderXpress.dbo.Orders out "D:\Orders.dat" -e errors.txt -S localhost -U sa -P Sa12345 -E -n
IF ERRORLEVEL 1 GOTO error_happened
call :check_errorfile
goto :EOF
:check_errorfile
if exist errors.txt (
FOR %%A IN (errors.txt) DO (
if %%~zA GTR 0 (
goto error_happened
) else (
del errors.txt
)
)
)
exit /b
:error_happened
echo,
echo An error has occurred. Script stopped
echo
pause
答案 1 :(得分:-1)
请试试这个......
开始尝试 bcp.exe&#34;从OrderXpress.dbo.Customers中选择*,其中CustId&lt; 1000&#34; queryout&#34; D:\ Customer.dat&#34; -S localhost -U sa -P Sa12345 -E -n
结束尝试
BEGIN CATCH
DECLARE @msg VARCHAR(1000)
SET @msg = ERROR_MESSAGE()
RAISERROR(@msg,16,0)
END CATCH