中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-07 03:48
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » errorlevel问题 查看 731 回复 9
楼 主 errorlevel问题 发表于 2008-01-06 04:56 ·  中国 山东 烟台 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
18年会员
UID 107722
性别 男
来自 烟台
状态 离线
echo ③、Import Data… > > "Import_FeeMst.log"
echo bcp %sqlDb%..%sqlTable1% in %sqlTable1%.DAT -n -q -S%sqlSv% -U%sqlUser% -P%sqlPwd% -b1000000 > > "Import_FeeMst.log"
bcp %sqlDb%..%sqlTable1% in %sqlTable1%.DAT -n -q -S%sqlSv% -U%sqlUser% -P%sqlPwd% -b1000000 > > "Import_FeeMst.log"
if errorlevel 1 (
set errproc=③、Import Data
set errsite=「 Import %sqlDb%..%sqlTable1% 」
goto :_Error
)
echo bcp %sqlDb%..%sqlTable1% in has succeed> > "Import_FeeMst.log"

如果BCP插入主键重复,报错,那么ERRORLEVEL应该是多少?
2 发表于 2008-01-06 15:51 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
echo %errorlevel%
第一高手 第二高手

3 发表于 2008-01-07 09:42 ·  中国 山东 烟台 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
18年会员
UID 107722
性别 男
来自 烟台
状态 离线
我用你的方法查了一下,
在主键重复,插入错误的情况下
errorlevel 居然是0
明明已经失败了,
errorlevel 怎么还是0呢?

本人初学,请各位高手帮忙
4 发表于 2008-01-07 11:12 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
你1楼的不是CMD批处理吧
bcp又是什么?
第一高手 第二高手

5 发表于 2008-01-07 13:07 ·  中国 山东 烟台 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
18年会员
UID 107722
性别 男
来自 烟台
状态 离线
BCP就是向数据库中导入数据的一种工具
路 是自己选的
学习 是为了具备解决问题的能力
6 发表于 2008-01-07 14:49 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
echo ③、Import Data… > > "Import_FeeMst.log"
如果是XP CMD这个语法是错误的
第一高手 第二高手

7 发表于 2008-01-07 16:59 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
errorlevel一般是命令行程序执行某个指令后的返回值,bcp不一定遵循这个标准,对于它来说,可能只要程序正常执行了就返回0。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
8 发表于 2008-01-07 20:46 ·  中国 山东 烟台 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
18年会员
UID 107722
性别 男
来自 烟台
状态 离线
7 楼说的十分有理

现有一棘手问题

在批处理中(.bat)
写了一个BCP IN
如果导入数据时主键重复
errorlevel 依然为0
如果BCP中加了 -e 参数,也不会生成errfile文件。

例:
@echo off
set date=%date%
set fdate=%date:/=%
set folder=D:\
set folder_bk=D:\test\

date /T >>test.log
time /T >>test.log

echo begin in ......
bcp "master.dbo.table1" in "table1.dat" -S. -Usa -P -n -E -e%folder_bk%%fdate%errfile.dat || goto :_error
echo errorlevel: %errorlevel%
if errorlevel 1 (
set errproc=Data IN
set errsite=「table1 IN」
goto :_Error
)
echo in succeeded!>>test.log
pause

copy test.log %folder_bk%%fdate%%time:~0,2%%time:~3,2%test.log

goto :end

:error
time /T >>test.log
echo here is an error >>test.log
goto end

:end
time /T >>test.log
echo ___________________END_______________>>test.log



在BCP IN主键重复报错的情况下

1.errorlevel依然是0(和BCP IN执行成功时一样)
2.|| goto :_error 没有执行(难道是BCP报错,但DOS不认为是错,反正是数据库和DOS没有直接关系,但是BCP就是批处理命令啊,太郁闷了)
3.BCP IN 中有 -e 参数,但主键重复时,不会生成errfile文件

请各位高手指点一下
怎么写,才能让BCP IN主键重复报错后,跳转到:error
谢谢大家
路 是自己选的
学习 是为了具备解决问题的能力
9 发表于 2008-01-08 08:39 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
bcp在导入数据时是否有屏幕输出(或者有相关参数来控制),如果有,可以将屏幕输出转向到一个文件中,然后再在该文件中查找是否有对应的错误字符串。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
10 发表于 2008-01-08 13:37 ·  中国 山东 烟台 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
18年会员
UID 107722
性别 男
来自 烟台
状态 离线
嗯,有


在 test.log 里有
“SQLState = 23000, NativeError = 2627
Error = 。。。。。。
SQLState = 01000, NativeError = 3621
Warning = 。。。。。。

可是我不太懂批处理编程,属于初学阶段
不会写你所说的
”在该文件中查找是否有对应的错误字符串。 “
路 是自己选的
学习 是为了具备解决问题的能力
论坛跳转: