2012-03-26 5 views
1

Ich verwende Powershell-Skript, um ein paar * .SQL-Datei auszuführen. Ich kann mit dem Skript unter den Ausgangswert erhalten ..Wie behandeln Sie die Ausnahme in Fledermaus und * SQL-Dateien

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

Das Problem ist, dass ich zu dem Ausgangstext extrahieren, um festzustellen, ob es ein Fehler in SQL-Datei oder nicht ..

Gibt es Best Practices, um die Ausnahmen in der Powershell-Datei und der * .sql-Datei zu behandeln?

Muss ich den Fehler in jeder SQL-Datei abfangen, um die vordefinierte Ausgabe zu erzeugen?

Antwort

0

Sie können den Exit-Code sqlcmd verwenden, um festzustellen, ob ein Fehler aufgetreten ist oder nicht.

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

Wenn der Exit-Code nicht 0 ist, werden Sie in der Regel die Fehlermeldung finden entweder in stdout oder stderr. Sie können sowohl in der Ausgangsgröße so:

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

Wenn es etwas war in stderr es mit kombiniert werden, was in stdout ist.

In Ihrem SQL-Skript werden Sie auch Best-Practice-Fehlerbehandlungstechniken wie Try/Catch-Konstrukte implementieren und Transaktionen verwenden, wo dies gerechtfertigt ist.

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

Wenn Sie eine Ausnahme in der SQL-Skript fangen die Fehlermeldung drucken und den Return-Code festgelegt, so dass Sie den Fehler in Powershell verarbeiten können.

+0

$ LASTEXITCODE geben Sie mir immer 0 .. In meiner SQL-Datei verwendete ich einen Tabellennamen, der nicht in db existiert, aber ich habe $ LASTEXITCODE 0. –

+0

@MichaelSync Sie müssen möglicherweise die Option ['-b 'verwenden ] (http://msdn.microsoft.com/en-us/library/ms162773.aspx). –

+0

Hallo @Andy Arismendi Danke für die Antwort .. Ich habe 0 mit -b-Option als auch .. –