SQLCmd to polecenie pozwalające na uruchamianie w trybie wsadowym skryptów SQL. Można go użyć np w edycji Express, do regularnego wykonywania kopii zapasowej (co było już opisane na mobilo/mobilo24). Jak jednak zbadać, jaki jest wynik działania polecenia SQLCmd z poziomu „dos-owego batch-a”, który uruchomił skrypt?
Załóżmy, że w batch-u masz polecenie:
sqlcmd -i D:\skrypty\kopia.sql -o d:\tmp\kopia.out
Jeżeli dojdzie do błędu związanego np. z brakiem pliku d:\skrypty\kopia.sql, to sqlcmd zwróci status błędu i możesz go sprawdzić badając zawartość zmiennej systemu operacyjnego %errorlevel%
Gdy nie dojdzie do błedu w sqlcmd, to zmienna %errorlevel% przyjmie wartość 0, a gdy dojdzie do błędu to 1 (lub inna niezerowa).
Jeżeli jednak bład nie był „aż tak gruby”, wynikał np. z błednego zapytania sql w pliku kopia.sql, to sqlcmd nadal zwraca 0.
Na szczęście mamy jednak opcję -b polecenia sqlcmd, która w przypadku napotkania błędu z natury sql-owego w skrypcie, przerwie ten skrypt, a sqlcmd zakończy się ze statusem 1. Polecenie należałoby więc zmienić na:
sqlcmd -i D:\skrypty\kopia.sql -o d:\tmp\kopia.out
Oczywiście tego rodzaju błedy można by też obsłużyć wewnętrznie w skrypcie sql np. przy pomocy BEGIN TRY oraz BEGIN CATCH.