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, menentukan 0
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 memiliki NUL
kata kunci (yang bukan salah ketik: ia memiliki satu L
, 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 dari PRINT
perintah:
CD %TEMP%
SQLCMD -E -Q "print 1;" -r0 > NUL
Tetapi yang berikut ini menampilkan pesan kesalahan karena itu tidak diarahkan ke NUL
:
CD %TEMP%
SQLCMD -E -Q "print a;" -r0 > NUL
Pengembalian:
Msg 128, Level 15, State 1, Server DALI, Line 1
The name "a" is not permitted in this context. Valid expressions are constants,
constant expressions, and (in some contexts) variables. Column names are not permitted.
2> Err.txt
, tetapi sepertinyaSQLCMD
tidak membagi outputnya.