2012-03-26 2 views
1

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

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

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

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

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

ответ

0

Вы можете использовать код выхода 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.

+0

$ LASTEXITCODE всегда дает мне 0 .. В моем файле sql я использовал имя таблицы, которое не существует в db, но я получил $ LASTEXITCODE 0. –

+0

@MichaelSync Возможно, вам придется использовать опцию ['-b' ] (http://msdn.microsoft.com/en-us/library/ms162773.aspx). –

+0

Привет @Andy Arismendi Спасибо за ответ. У меня есть 0 с опцией -b также. –

Смежные вопросы