Theo mặc định, SQLCMD gửi tất cả các thông báo không lỗi và thông báo lỗi đến thiết bị xuất chuẩn . Do đó, cố gắng chuyển hướng đầu ra sẽ không giúp đỡ.
Điều đầu tiên bạn cần làm để chỉ nhận một hoặc một loại thông báo khác (lỗi hoặc không lỗi) là yêu cầu SQLCMD phân tách chúng bằng cách gửi các thông báo lỗi (mức độ nghiêm trọng 11 trở lên) đến stderr . Bạn làm điều này bằng cách sử dụng -r
công tắc dòng lệnh, chỉ định 0
làm tùy chọn cho công tắc đó (tức là -r0
). Tại thời điểm này, không có sự khác biệt rõ ràng về việc chạy SQLCMD và xem các thông báo thuộc bất kỳ loại nào được hiển thị trên màn hình.
Phần tiếp theo là lọc ra các tin nhắn thông thường sẽ xuất hiện . Điều này có thể được thực hiện bằng cách chuyển hướng các thông báo xuất chuẩn đến một nơi nào đó thông qua >
, nhưng đến đâu? Bạn có thể làm > file.txt
, nhưng tôi nghi ngờ bạn muốn có một tệp tin nhắn mà bạn không muốn bắt đầu. May mắn thay, DOS có NUL
từ khóa (đó không phải là một loại: nó có một L
, không phải hai) hoạt động như /dev/null
trong Unix. Có nghĩa là bạn có thể sử dụng các mục sau để chuyển hướng đầu ra đến hư không : > NUL
.
Sau đây sẽ thực thi PRINT
lệnh và hiển thị không có đầu ra vì không có lỗi nào được tạo và không có tệp nào được tạo có chứa đầu ra của PRINT
lệnh:
CD %TEMP%
SQLCMD -E -Q "print 1;" -r0 > NUL
Nhưng sau đây sẽ hiển thị một thông báo lỗi vì chúng không được chuyển hướng đến NUL
:
CD %TEMP%
SQLCMD -E -Q "print a;" -r0 > NUL
Trả về:
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
, nhưng có vẻ nhưSQLCMD
không phân chia đầu ra của nó.