Korzystam z narzędzia sqlcmd z pliku wsadowego i zastanawiałem się, jak sprawić, by zwrócił błąd ERRORLEVEL inny niż 0, gdy coś pójdzie nie tak z kopią zapasową.
sql-server
sql-server-2008-r2
sqlcmd
leeand00
źródło
źródło
Odpowiedzi:
Powinieneś użyć opcji -b w sqlcmd.
-b Określa, że sqlcmd kończy działanie i zwraca wartość DOS ERRORLEVEL, gdy wystąpi błąd. Wartość zwracana do zmiennej DOS ERRORLEVEL wynosi 1, gdy komunikat o błędzie programu SQL Server ma poziom ważności większy niż 10; w przeciwnym razie zwracana jest wartość 0
http://msdn.microsoft.com/en-us/library/ms162773.aspx
źródło
Ze strony narzędzia MSDN SQLCMD pod adresem : http://msdn.microsoft.com/en-us/library/ms162773.aspx
Możesz więc zawinąć
BACKUP DATABASE...
polecenie wTRY...CATCH
blok i wywołać odpowiedni komunikat o błędzie, którysqlcmd
następnie powróci do pliku wsadowego.Na przykład rozważ następujący
errorleveltest.sql
plik:I następujący plik .bat: (pierwszy wiersz jest zawijany dla czytelności, ale musi znajdować się w jednym wierszu).
Zwraca to następujące polecenie z wiersza polecenia cmd.exe:
Jak widać, zwracany jest ERRORLEVEL 1 zamiast normalnej wartości 0. Nie mogę uzyskać ERRORLEVEL odzwierciedlającej faktyczny numer błędu, w tym przypadku 50002; być może jest jakiś problem w moim kodzie, a może jest jakiś problem z moim środowiskiem.
źródło
ERRORLEVEL
nie należy oczekiwać, że będą miały tę samą wartość, co numer błędu zgłoszony z SQL Server. ErrorNumber jest wartością specyficzną dla SQL Server, która wskazuje, dlaczego (tj. SQL Server) została zakończona. Z drugiej stronyERRORLEVEL
jest wartością specyficzną dla SQLCMD, która wskazuje, dlaczego (tj. SQLCMD) została zakończona.