Bagaimana Anda bisa mendapatkan SQLCMD, ketika mengeksekusi file skrip SQL, untuk hanya menghasilkan kesalahan atau peringatan yang ditemui?
Saya pada dasarnya tidak ingin pesan berbasis informasi menjadi keluaran.
sql-server
sql-server-2008-r2
sqlcmd
bytedev
sumber
sumber
2> Err.txt
, tetapi sepertinyaSQLCMD
tidak membagi outputnya.-r0
saklar baris perintah, dalam hal ini mereka dapat diarahkan ke file menggunakan2>
, atau mereka dapat ditampilkan saat pesan biasa dialihkan melalui>
. Silakan lihat jawaban saya untuk detailnya.Jawaban:
Secara default, SQLCMD mengirim semua pesan non-kesalahan dan pesan kesalahan ke stdout . Oleh karena itu, berusaha mengarahkan output tidak akan membantu.
Hal pertama yang perlu Anda lakukan untuk mendapatkan hanya satu atau jenis pesan lainnya (kesalahan atau non-kesalahan) adalah memberi tahu SQLCMD untuk memisahkannya dengan mengirim pesan kesalahan (tingkat keparahan 11 atau lebih tinggi) ke stderr . Anda melakukan ini dengan menggunakan
-r
saklar baris perintah, menentukan0
sebagai opsi untuk saklar itu (yaitu-r0
). Pada titik ini tidak ada perbedaan yang terlihat dalam hal menjalankan SQLCMD dan melihat pesan jenis apa pun yang ditampilkan di layar.Bagian selanjutnya adalah memfilter pesan biasa yang akan stdout . Ini dapat dilakukan dengan mengarahkan pesan stdout ke suatu tempat melalui
>
, tetapi ke mana? Anda bisa melakukannya> file.txt
, tetapi saya ragu Anda menginginkan file pesan yang tidak ingin Anda mulai. Untungnya, DOS memilikiNUL
kata kunci (yang bukan salah ketik: ia memiliki satuL
, bukan dua) yang berfungsi seperti/dev/null
di Unix. Berarti Anda dapat menggunakan berikut untuk output redirect ke mana-mana:> NUL
.Berikut ini akan menjalankan
PRINT
perintah dan tidak menunjukkan output karena tidak ada kesalahan yang dihasilkan, dan tidak ada file yang dibuat yang akan berisi output dariPRINT
perintah:Tetapi yang berikut ini menampilkan pesan kesalahan karena itu tidak diarahkan ke
NUL
:Pengembalian:
sumber
Berikut ini akan berfungsi:
sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.log
Output dari query akan dimasukkan ke dalam log dan tidak ada yang dicetak di layar.
Lebih detail di artikel MSDN di sqlcmd .
sumber
-r1
mengirim semua pesan ke stderr , termasukPRINT
danRAISERROR('', 10, 1)
pesan. Anda perlu menggunakan-r0
untuk menjaga agar pesan-pesan info reguler tetap stdout sehingga mereka diarahkan ke test.log .Menemukan ini di SQLServerCentral
http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx
sumber
-r1
mengirim semua pesan ke stderr , termasukPRINT
danRAISERROR('', 10, 1)
pesan. Anda perlu menggunakan-r0
untuk menjaga agar pesan-pesan info biasa tetap stdout sehingga mereka diarahkan untuk menginstal.log .