SQLCMD 및 다른 명령의 호출을 포함하는 .bat (Windows 명령) 파일이 있습니다. (물론 SQLCMD가 T-SQL 코드를 SQL Server로 보냅니다.) SQL 코드에서 특정 조건을 감지하고 조건부로 전체 배치 파일을 종료하려고합니다. 나는 RAISERROR, THROW, 그리고 0 (내가 자랑스럽지 않다)과 SQLCMD의 다양한 명령 행 스위치 및 .bat 파일의 errorlevel 처리와 함께 심의 부서의 다양한 조합을 시도했다.조건부로 SQLCMD를 통해 실행되는 SQL 코드에서 .BAT 파일을 끝내는 방법
5789568에 대한 답변을 시도했지만 제 경우에는 작동하지 않습니다. 실패한 시도 하나를 보여주는 두 개의 파일이 있습니다. 3 개 이상의 테이블이 있으면 중단을 시도합니다. 그러나 마지막 명령 (에코)이 실행될 때 알 수 있듯이 박쥐 파일을 중단하지 않습니다. SQLCMD의 실행을 중단하지 않습니다. SQLCMD가 얼마나 많은 테이블이 있는지 알려주므로 볼 수 있습니다.
example.bat
set ERRORLEVEL=0
sqlcmd -b -S dbread.vistaprint.net -E -d columbus -e -i example.sql
if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL%
echo we got to the end of the BAT file
example.sql
SET XACT_ABORT ON
if ((SELECT COUNT(*) FROM sys.tables) > 3)
begin
RAISERROR ('There are more than 3 tables. We will try to stop', 18, -1)
end
SELECT COUNT(*) FROM sys.tables
코드는 거의 OK입니다. 프로세스 출력을 숨기는 것에 대해 말하고 있습니다. 명령 출력을 없애려면 'NUL'으로 리디렉션하십시오. 그래서'sqlcmd -b -S bla.bla.net -E -d my_db -e -i example.sql'은'sqlcmd -b -S bla.bla.net -E -d my_db -e -i example.sql이 될 것입니다. > NUL이라고합니다. 명령 출력이 블랙홀로 보내지지만 'ERRORLEVEL'은 여전히 접근 가능합니다. – elzooilogico
또는 오류 출력 만 없애 버리십시오. * NUL *을 * 2로 변경하십시오. NUL * – elzooilogico
@elzooilogico - 아니, OP 문제와 관련이 없습니다. – dbenham