Как вы обрабатываете исключение в файлах bat и * sql - PullRequest
1 голос
/ 26 марта 2012

Я использую скрипт powershell для запуска нескольких * .sql файлов. Я могу получить выходное значение с помощью сценария ниже ..

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

Проблема в том, что мне придется извлечь выходной текст, чтобы определить, есть ли какая-либо ошибка в файле SQL или нет ..

Есть ли лучшая практика для обработки исключений в файле powershell и * .sql?

Должен ли я отлавливать ошибку во всех файлах SQL, чтобы получить предопределенный вывод?

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Возможно, это не вариант, но командлет Invoke-SqlCmd имеет параметр с именем "-ErrorVariable", чтобы перехватывать сообщения об ошибках .

0 голосов
/ 26 марта 2012

Вы можете использовать код выхода sqlcmd, чтобы определить, произошла ошибка или нет.

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

Если код выхода не равен 0, вы обычно найдете сообщение об ошибке либо в 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.

...