0
Get-ChildItem ".\Stored Procedures\*.sql" | ForEach-Object { sqlcmd -S ServerName -d     DatabaseName -E -i $_.FullName }

上記のコマンドを使用してフォルダーからスクリプトのバッチを実行すると、問題が中間スクリプト (間にある create/Alter/DROP DML スクリプトなど) に残っている場合は、そこでのみ停止し、エラー メッセージを表示する必要があります。

4

1 に答える 1

1

いくつかのことを行う必要があります。

  1. ErrorActionPreference を停止するように設定します
  2. sqlcmd.exe ユーティリティで -b パラメーターを使用する
  3. sqlcmd.exe ユーティリティの出力をキャプチャしてログに記録または表示する

別のフォーラムで同様の質問に回答し、その回答をここに再投稿しました。

echo "select 'Good 1'" > C:\temp\scripts\1.sql
echo "select * from missingTable" > C:\temp\scripts\2.sql
echo "Select 'Good 3'" > C:\temp\scripts\3.sql

$ErrorActionPreference = "Stop"

ForEach ($S In Gci -Path "C:\Temp\Scripts\" -Filter *.sql | Sort-Object Name) {
    try { 
        $result = SqlCmd -b -S $env:computername\sql1 -i $S.FullName
        $result = $result -join "`n"

        if ($LASTEXITCODE -ne 0) {
            throw "$S.FullName : $lastexitcode : $result"
        }
        else {
            write-output "Success: $($s.fullname) : $result" | Out-File C:\Temp\Scripts\sqllogging.txt -Append
        }
    }
    catch {
        write-output "Failed: $_ " | Out-File C:\Temp\Scripts\sqllogging.txt -Append
        throw
    } 
}
于 2013-01-28T12:55:28.510 に答える