Я работаю над сценарием для перезагрузки таблицы с помощью SQLCMD в Linux, подключающемся к базе данных хранилища данных SQL Azure.
После завершения инструкции INSERT следующая инструкция завершается ошибкой (но не завершает выполнение sqlcmd) с «предупреждением».
insert into
schema.table_temp
(
...list of columns
)
select
...list of columns
from
schema.table
;
GO (COMMENT--> в сценарии, но не отображается в журнале.)
(0 rows affected)
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES t WHERE TABLE_TYPE = 'BASE TABLE' and TABLE_SCHEMA = 'schema' AND TABLE_NAME = 'table_nox' )
DROP TABLE schema.table_nox
;
GO (COMMENT--> в сценарии, но не отображается в журнале.)
SqlState 24000, Invalid cursor state
Сценарий продолжает работать, и каждый последующий пакет получает один и тот же SqlState 24000, недопустимое состояние курсора «предупреждение».
Если я закомментирую оператор INSERT, сценарий запустится без предупреждения, как и ожидалось. Я предполагаю, что оператор INSERT не закрывает курсор, а затем последующие команды получают предупреждение, которое действительно следует считать ошибкой и завершать выполнение. (У меня включен флаг -b при вызове sqlcmd.)
Является ли мое единственное решение разбить сценарий на несколько частей?