2017-02-21 6 views
0

SQLクエリを順番に実行しようとしています。 SQLクエリのいずれかが失敗した場合、Windows powershellスクリプトは終了して電子メールを送信する必要があります。ログはログディレクトリに書き込まれる必要があります。データは= <これは>実行時引数を指定してpowershellを使用して複数のSQLを順番に呼び出す

例のコードの下、実行時に渡される場所:

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" 

任意の助けいただければ幸いです。

よろしく、

+1

後あなたがチェック部分をコピー&ペーストする必要がどこ(の代わりに線形コードを有するのループから抜け出すように、配列内のクエリを保存する価値がありますこれまでに作成したさまざまな情報(SQL、電子メール、ファイルへの書き込み)に関する情報を集めましたか? – TechSpud

+0

スクリプトはSQLクエリを順番に実行する必要があります。 、file2など。実行時に条件入力が渡されます – user4432340

答えて

0

"SQLクエリに失敗しました"とはどういう感じですか? Invoke-SqlCmd関数の戻り値に依存するか、予期しない "失敗"メッセージ(または複数のメッセージ)がある可能性があります。

私は、Invoke-sqlcmdのに慣れていませんよ。チェックアウト:the MSDN page; -AbortOnErrorは、-ErrorLevelのように、あなたに役立つようです。ここで

は拡張する方法についてのコメントで、単一予想されるエラーのアウトラインです。あなたは以上のループをすることができますし、試してみました何各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

私はpowershellの新機能です。 '$ SqlQuery = "select * from emp where data = " try { $ SqlResourceMon = Invoke-SqlCmd -Query $ SqlQuery -ServerInstance "SQLINSTANCENAME" -Database "temp" -ErrorAction Stop -verbose 4>&1 | OUTFILE someoutfile.txt } キャッチ { $ _ 送る-はMailMessage -from "X" を "Y" -subject "テストメール" -body "TEST" "エラー実行されているSQLの$のSQLQuery" } '-toしてくださいこれが機能するかどうかを確認してください。 – user4432340

+0

ようこそStackOverflowへようこそ、PowerShellへようこそ! MSDNとドキュメントはあなたの親友です。私が見る限り、コードはきれいに見えます。あなたはそれを実行しようとしましたか?私はあなたのためにそれを実行することはできません。 – gms0ulman

関連する問題