2013-03-22 3 views
0

저는 Windows 서버 엔터프라이즈 시스템 SP2에서 DOS 6.0.6002를 실행하고 있습니다. SQL Server 2008 R2 (10.50.4000) DOS에 주 제어 프로그램이 있습니다. sqlcmd를 통해 SQL 프로그램을 호출하고 있습니다. 단순화 된 버전은 다음과 같습니다DOS에서 오류 테스트 및 제어

set sqlsvr=myServer 
set logfile=logfile.txt 
sqlcmd -S %sqlsvr% -d myDB -i import_some_stuff.sql > "%logfile%" 2>&1 
echo error level = %ERRORLEVEL% 

나는 꽤 튼튼이 프로그램이 필요합니다. 매일 많은 파일과 테이블에 대해 실행해야합니다. 실패하면 sysadmin에게 알려야합니다. 당장은 그냥 잡으세요.

1) 존재하지 않는 하나에 파일의 이름을 변경 :

그래서이 테스트 할

, 나는 다음 테스트를 시도했습니다. 결과 : 1의 errorlevel을 반환합니다 (즉, 오류가 발생했습니다!) bravo!

2) SQL 프로그램 앞에있는 구문상의 쓰레기를 입력하십시오. 결과는 :..이 로그 파일에서 오류 메시지를 출력하지만 오류를 반환하지 않습니다 (그래서 %의 ERRORLEVEL %의에서 리턴 값이 0이 나에게 놀라운 보인다 나는 무엇 실종

+0

견고하고 _Batch scripting_가 가지 않는다이다 아주 잘 함께 ... 왜 Powershell이나 Perl이나 ... 같은게 아닌가? – Lucas

+0

cmd.exe는 DOS와는 아무런 관련이없는 Windows 콘솔 모드 프로그램입니다. 유사점은 순전히 피상적입니다. –

+0

나는 그것을 깨닫지 못했다. 빌. 수정 해줘서 고마워. – elbillaf

답변

1

-b를 시도? 옵션은 SQLCMD합니다 :.

종료 SQLCMD하고 오류가 발생하는 DOS ERRORLEVEL 값을 반환 도스 ERRORLEVEL 변수에 반환되는 값을

-b

지정 1 때 t이다 그는 SQL Server 오류 메시지의 심각도 수준이 (10보다 큼)입니다. -V 옵션 이 -b와 함께 설정되면 심각도 수준이 -V를 사용하여 설정된 값보다 낮은 경우 sqlcmd에서 오류를보고하지 않습니다. 명령 프롬프트 배치 파일은 ERRORLEVEL 값을 테스트하고 오류를 적절히 처리 할 수 ​​있습니다. sqlcmd는 심각도 수준 10 (정보 메시지)에 대한 오류를보고하지 않습니다.

함께 SQLCMD 스크립트가 잘못된 주석 구문 오류, 을 포함하거나 스크립트의 변수가 누락 된 경우, ERRORLEVEL 반환 여기

1. documentation

+0

그게 효과가있는 것 같습니다! 감사! 더 많은 테스트 케이스에! – elbillaf

+0

@elbillaf 질문이 해결되면 답변으로 표시 할 수 있습니다. – Lucas