2017-02-21 3 views
0

Ich versuche, SQL-Abfragen in Folge auszuführen. Wenn eine der SQL-Abfragen fehlschlägt, sollte das Windows Powershell-Skript beendet und E-Mails gesendet werden. Das Protokoll sollte in das Protokollverzeichnis geschrieben werden. wo Daten = < dies in der Laufzeit übergeben werden>Rufen Sie mehrere SQL mit Powershell in Folge mit Laufzeitargumenten auf

Beispiel-Code unten:

Invoke-Sqlcmd -Query "SELECT data from emp where data=<run time argument>;" -ServerInstance "MyComputer\MyInstance" 

Invoke-Sqlcmd -Query "SELECT data from class where data=<run time argument>;" -ServerInstance "MyComputer\MyInstance" 

Invoke-Sqlcmd -Query "SELECT data from stud where data=<run time argument>;" -ServerInstance "MyComputer\MyInstance" 

Invoke-Sqlcmd -Query "SELECT data from cust where data=<run time argument>;" -ServerInstance "MyComputer\MyInstance" 

Invoke-Sqlcmd -Query "SELECT data from new where data=<run time argument>;" -ServerInstance "MyComputer\MyInstance" 

Jede Hilfe würde geschätzt.

Grüße,

+1

Was Sie versucht haben, Haben Sie Informationen über die verschiedenen Teile gesammelt, die Sie zusammenbringen müssen (SQL, E-Mail, Schreiben in eine Datei)? – TechSpud

+0

Skript muss SQL-Abfragen nacheinander ausführen Speichern Sie die Ausgabe der SQL-Abfrage in Dateinamen wie Datei1 , Datei2 usw. Die Eingabe der Where-Bedingung wird zur Laufzeit übergeben – user4432340

Antwort

0

Wie sieht es aussehen, wenn "SQL-Abfrage nicht"? Sie könnten sich auf die Rückgabe der Invoke-SqlCmd-Funktion verlassen oder eine erwartete "Fail" -Nachricht (oder mehrere Nachrichten) erhalten.

Ich bin nicht vertraut mit Invoke-SqlCmd. Check out the MSDN page; -AbortOnError sieht aus, als wäre es hilfreich für Sie, ebenso wie -ErrorLevel.

Hier ist eine Gliederung für einen einzelnen erwarteten Fehler, mit Kommentar, wie Sie erweitern können. es lohnt sich Ihre Fragen in einem Array zu speichern, so dass Sie eine Schleife über, dann können und brechen aus einer Schleife statt linearer Code von (wo Sie kopieren und fügen Sie den Prüfungsteil nach jedem invoke-sqlcmd

# string with a single error. you could use an array and add 
# a foreach ($error in $errors) on the line marked #here 
$expectedError = "Failed" 

# Functions have to appear above where they are used 
Function Check-SQLResults($result){ 

    # a try-catch statement will execute the code in the try part, going 
    # to the catach part on a TERMINATING error 
    try{ 
     # check each line for your expected error 
     foreach($line in $result){ 
      #here 
      if($line -like "*$expectedError*"){ 
       Write-Error "Something went wrong: $line" -ErrorAction Stop 
      } 
     } 

     # true is only returned if none of the result lines are like your error 
     return $true 
    }catch{ 

     # false is returned if any lines contain error 
     return $false 
    } 
} 

# store the sql outcome in a variable so you can check it 
$result = Invoke-Sqlcmd -Query "SELECT data from emp where data=;" -ServerInstance "MyComputer\MyInstance" 

# using a function that tells you if the results contain an error or not is neater. 
# again, this is manually dealing with errors and invoke-sqlcmd provides other options. 
$resultIsErrorFree = Check-SQLResults -result $result 

If(resultIsErrorFree -eq $true){ 
    # execute next invoke-sqlcmd 
}else{ 
    # Send e-mail. $results can be added to body. 
} 
+0

Vielen Dank Ich bin sehr neu in Powershell. $ SqlQuery = "Wählen Sie * aus EMP, wo Daten = versuchen $ SqlResourceMon = Invoke-SqlCmd -Abfrage $ SqlQuery -ServerInstance "SQLINSTANCENAME" -Datenbank "temp" -ErrorAction Stop -verbose 4> & 1 | outfile someoutfile.txt } fangen { $ _ Verschicken Mailmessage -Von "X" -Zur "Y" -Subject "Test E-Mail" -Body "TEST" "Fehler mit SQL $ sqlquery" } 'Bitte Überprüfen Sie, ob dies funktioniert. – user4432340

+0

Willkommen bei StackOverflow, willkommen bei PowerShell! MSDN und die Dokumentation sind deine besten Freunde. Der Code sieht soweit aus, wie ich sehen kann; Hast du versucht, es auszuführen? Ich kann es nicht für dich laufen lassen. – gms0ulman

Verwandte Themen