Когда вы raiserror
, второй параметр severity
указывает, будет ли запрос продолжать выполняться или нет. severity
из 0-10 являются информационными (ошибка не возникает), 11-19 - не фатальные ошибки, 20-25 вызовут ошибку и затем немедленно прервут ваше соединение с сервером базы данных. Вы должны быть sysadmin
, чтобы использовать severity
из 19-25.
Я думаю, что это имитирует то, что вы пытаетесь сделать.
auto. sql
PRINT 'Starting...'
:r 1.sql
:r 2.sql
PRINT 'Completed normally on ' + (CONVERT( VARCHAR(24), GETDATE(), 101))
1. sql
select 1 as value
raiserror ('This will not stop execution', 11, 1)
select 2 as value
2. sql
select 3 as value
raiserror ('This is an information message, not an error', 10, 1)
select 4 as value
Затем выполните следующую команду, чтобы захватить вывод запроса в output.txt
и информационный / сообщения об ошибках на error.txt
:
sqlcmd -E -d tempdb -i auto.sql -r1 >output.txt 2>error.txt
-r1
указывает sqlcmd
перенаправить информационные сообщения / сообщения об ошибках на STDERR
.
>output.txt
перенаправляет STDOUT из запросов ( включая затронутые числа строк) в файл с именем output.txt
.
2>error.txt
перенаправляет STDERR в файл с именем error.txt
.
Вот два файла из приведенного выше сценария:
output.txt
value
-----------
1
(1 rows affected)
value
-----------
2
(1 rows affected)
value
-----------
3
(1 rows affected)
value
-----------
4
(1 rows affected)
error.txt
Starting...
Msg 50000, Level 11, State 1, Server NAME, Line 4
This will not stop execution
This is an information message, not an error
Completed normally on 02/27/2020
HTH