Рассмотрим следующий sql script
:ON ERROR EXIT
PRINT 'Line 3'
GO
PRINT 'Line 6'
GO
SELECT * FROM NonExistingTable
GO
PRINT 'Line 12'
GO
При запуске с SQLCMD
> sqlcmd -i MyScript.sql
Line 3
Line 6
Msg 208, Level 16, State 1, Server MyServer, Line 2
Invalid object name 'NonExistingTable'.
При запуске в SQL Server Management Studio с включенным режимом SQLCMD вы получаете
Line 3
Line 6
Msg 208, Level 16, State 1, Server MyServer, Line 2
Invalid object name 'NonExistingTable'.
** An error was encountered during execution of batch. Exiting.
Но когда вы дважды щелкните по строке ошибки, редактор запросов перейдет к проблемной строке.
Сообщается Строка 2 означает номер строки относительно партии. Пакеты разделяются операцией GO. Мы хотим получить реальный ответ Line 9.
Я также пробовал PowerShell Invoke-Sqlcmd, но это еще хуже, поскольку он вообще не обнаруживает такие ошибки (Обнаружение ошибок из Powershell Invoke -Sqlcmd не всегда работает?).
Есть ли простой способ обернуть наш sql script некоторыми помощниками, чтобы получить желаемые реальные строки ошибок?
UPD: я изменил ошибку script, чтобы убедиться, что она не сработает наверняка...