Saya menjalankan sqlcmd dari file batch dan saya bertanya-tanya bagaimana membuatnya mengembalikan ERRORLEVEL selain 0 ketika ada masalah dengan cadangan.
sql-server
sql-server-2008-r2
sqlcmd
leeand00
sumber
sumber
Jawaban:
Anda harus menggunakan opsi -b dalam sqlcmd.
-b Menentukan bahwa sqlcmd keluar dan mengembalikan nilai DOS ERRORLEVEL saat kesalahan terjadi. Nilai yang dikembalikan ke variabel DOS ERRORLEVEL adalah 1 ketika pesan kesalahan SQL Server memiliki tingkat keparahan lebih besar dari 10; jika tidak, nilai yang dikembalikan adalah 0
http://msdn.microsoft.com/en-us/library/ms162773.aspx
sumber
Dari halaman MSDN SQLCMD Utility di: http://msdn.microsoft.com/en-us/library/ms162773.aspx
Jadi, Anda bisa membungkus
BACKUP DATABASE...
perintah diTRY...CATCH
blok dan menaikkan pesan kesalahan yang sesuai, yangsqlcmd
kemudian akan kembali ke file batch Anda.Misalnya, pertimbangkan
errorleveltest.sql
file berikut :Dan file .bat berikut: (baris pertama dibungkus agar mudah dibaca, tetapi perlu satu baris.)
Ini mengembalikan yang berikut dari prompt cmd.exe saya:
Seperti yang Anda lihat, ERRORLEVEL 1 dikembalikan dan bukan nilai pengembalian normal 0. Saya tidak bisa mendapatkan ERRORLEVEL untuk mencerminkan jumlah kesalahan sebenarnya, dalam hal ini 50002; mungkin ada masalah dalam kode saya, atau mungkin ada beberapa masalah dengan lingkungan saya.
sumber
ERRORLEVEL
seharusnya tidak diharapkan memiliki nilai yang sama dengan Nomor Kesalahan yang dilaporkan dari SQL Server. The ErrorNumber adalah nilai khusus SQL Server untuk menunjukkan mengapa itu (yaitu SQL Server) dihentikan. Di sisi lain,ERRORLEVEL
adalah nilai spesifik SQLCMD untuk menunjukkan mengapa itu (yaitu SQLCMD) dihentikan.