web-dev-qa-db-ja.com

SQLCMDでエラーと警告のみを出力する方法は?

SQLスクリプトファイルを実行するときに、SQLCMDを取得して、発生したエラーや警告を出力する方法を教えてください。

情報ベースのメッセージが出力されることを本質的に望まない。

8
bytedev

デフォルトでは、[〜#〜] sqlcmd [〜#〜]はすべての非エラーメッセージとエラーメッセージをstdoutに送信します。したがって、出力をリダイレクトしようとしても役に立ちません。

1つまたは他のタイプのメッセージ(エラーまたは非エラー)のみを取得するために最初に行う必要があるのは、[〜#〜] sqlcmd [〜#〜]エラーメッセージ(重大度レベル11以上)をstderrに送信してそれらを分離します。これを行うには、-rコマンドラインスイッチを使用し、そのスイッチのオプションとして0を指定します(つまり、-r0)。この時点では、SQLCMDの実行と、画面に表示されるすべてのタイプのメッセージの表示に関して、目に見える違いはありません。

次の部分は、stdoutに送信される通常のメッセージを除外することです。これは、stdoutメッセージを>を介してどこかにリダイレクトすることで実行できますが、どこに送信しますか? > file.txtはできますが、最初からやりたくないメッセージのファイルが欲しいとは思いません。さいわい、DOSにはNULキーワードがあります(つまり、タイプがではないタイプ:Lが2つではなく1つある) Unixでは/dev/nullのように機能します。つまり、次を使用して出力をnowhereにリダイレクトできます:> NUL

以下はPRINTコマンドを実行し、エラーが生成されないため出力を表示せず、PRINTコマンドの出力を含むファイルは作成されません。

CD %TEMP%

SQLCMD -E -Q "print 1;" -r0 > NUL

ただし、以下はNULにリダイレクトされないため、エラーメッセージが表示されます。

CD %TEMP%

SQLCMD -E -Q "print a;" -r0 > NUL

戻り値:

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.
4
Solomon Rutzky

以下が機能します:

sqlcmd -U user -P pass -S Server -Q "sp_who" -r0 1> test.log

クエリからの出力はログに記録され、画面には何も出力されません。

詳細は sqlcmdのMSDN記事 を参照してください。

1
LowlyDBA

SQLServerCentralでこれを見つけました

sqlcmd -E -i"install.sql" -r1 2> install-err.log 1> install.log

http://www.sqlservercentral.com/Forums/Topic536968-146-1.aspx

0
Alf47