2012-03-26 7 views
1

私はいくつかの* .sqlファイルを実行するためにpowershellスクリプトを使用しています。私は以下のスクリプトを使用して出力値を得ることができます。..batと* sqlファイルの例外をどう扱うのですか?

$return_value = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1" 

問題は、私はSQLファイルかどうかに誤りがあるかどうかを判断するために、出力テキストを抽出する必要があること..です

powershellファイルと* .sqlファイルの例外を処理するベストプラクティスはありますか?

事前定義された出力を生成するために、すべてのSQLファイルでエラーをキャッチする必要がありますか?

答えて

0

sqlcmdの終了コードを使用して、エラーがあったかどうかを判断できます。終了コードが0でない場合

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1" 
if ($LASTEXITCODE -ne 0) { 
    Write-Error $output 
} 

あなたは通常どちらかstdoutまたはstderrでエラーメッセージを検索します。あなたは、このような出力変数の両方を置くことができます。

$output = sqlcmd -S ServerName -i "MyAwesome.sql" -v parameter1="par1" 2>&1 

何がstderrであった場合、それはstdoutにあるものと組み合わされます。

SQLスクリプトでは、try/catch構文を使用したり、保証が必要なトランザクションを使用するなど、ベストプラクティスのエラー処理技術を実装することもできます。

http://msdn.microsoft.com/en-us/library/ms179296.aspx

あなたのSQLスクリプトで例外をキャッチした場合、エラーメッセージを印刷し、あなたはPowerShellでエラーを処理できるように、リターンコードを設定します。

+0

$ LASTEXITCODEは常に私に0を与えます。私のSQLファイルでは、データベースに存在しないテーブル名を使用しましたが、$ LASTEXITCODE 0があります。 –

+0

@MichaelSync ['-b'オプション](http://msdn.microsoft.com/en-us/library/ms162773.aspx) –

+0

こんにちは@Andy Arismendi回答ありがとうございます。私も-bオプションで0を得ました。 –

関連する問題