在执行 SQL 脚本文件时,如何让 SQLCMD 仅输出它遇到的任何错误或警告?
我基本上不希望输出基于信息的消息。
在执行 SQL 脚本文件时,如何让 SQLCMD 仅输出它遇到的任何错误或警告?
我基本上不希望输出基于信息的消息。
SQLCMD
通过向其传递参数来阻止返回非错误输出消息是不可能的。
但是,您可以做的是将错误消息重定向到STDERR
,然后将所有其他消息重定向到NUL
。
这是通过传递-r
参数来完成的。来自网上书籍:
-r[0| 1] 向标准错误发送消息
将错误消息输出重定向到屏幕 (stderr)。如果不指定参数或指定 0,则仅重定向严重级别为 11 或更高的错误消息。如果指定 1,则重定向所有错误消息输出,包括 PRINT。如果使用 -o 则无效。默认情况下,消息被发送到标准输出。
根据您要显示的确切错误消息进行设置-r
,但要显示所有错误消息输出,示例命令为:
sqlcmd -Q "select 1 as a; select 1/0 as b" -E -r1 1> NUL
除此之外,如果您将错误发送到文件中,我发现了这个https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
我用过的。如果您省略设置 OUT,那么您只会创建一个错误日志。所以你有这样的命令:
sqlcmd -x -E -S MyServer -i C:\MySQLBatchToRun.sql
然后在 MySQLBatchToRun.sql 中,像这样
USE MyDatabase
:Error C:\MyErrorLog.txt
:r C:\MySQLScript.sql
GO
在 MySQLScript.sql 中,您可以运行实际的 SQL。这有点令人费解,但有效。我唯一的问题是它似乎创建了一个空的错误日志文件,即使没有错误。
看起来打印语句使用 -r1 发送到 stderr,因此您可以使用它们与输出分开记录,如下所示:
sqlcmd -Q "print 'hello logfile';select 'Ted' as bro" -r1 1> C:\output.txt 2> C:\logfile.txt
这也适用于 -i 输入文件,例如: sqlcmd -i helloTed.sql -r1 1> C:\output.txt 2> C:\logfile.txt
helloTed.sql:
打印“你好日志文件”;
选择'Ted'作为兄弟
可能您可以使用 -Q 并插入 exec 包含打印的存储过程。