Ошибка захвата и продолжить с sqlcmd: r - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть следующий пакетный файл и сценарий SQL, который запускает несколько файлов. sql. Есть ли способ зарегистрировать любые ошибки и продолжить со скриптом?

myauto sql. sql

PRINT 'Starting...'

--:On Error exit

:r SQLQuery10.sql
:r SQLQuery20.sql
:r SQLQuery30.sql


PRINT 'Completed normally on ' + (CONVERT( VARCHAR(24), GETDATE(), 101))
GO

myauto sql .bat

SQLCMD -E -d rstestdb1 -i myautosql.sql
PAUSE

Когда я намеренно raiseerror в файле SQLQuery20. sql, пакетная программа останавливается. Есть ли способ зарегистрировать ошибку и продолжить работу со скриптом?

1 Ответ

1 голос
/ 28 февраля 2020

Когда вы 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

...