2016-07-15 3 views
1

Я работаю над сценарием, чтобы перезагрузить таблицу, используя SQLCMD в Linux, подключающуюся к базе данных Azure SQL Data Warehouse.sqlcmd на Azure SQL Data Warehouse - SqlState 24000, Неверное состояние курсора после инструкции INSERT

После завершения оператора 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 

сценарий с. ontinues для запуска каждой последующей партии, получающей то же самое SqlState 24000, Неверное состояние курсора «предупреждение»

Если я прокомментирую инструкцию INSERT, сценарий будет работать без предупреждения, как и ожидалось. Я предполагаю, что инструкция INSERT не закрывает курсор, а затем последующие команды получают предупреждение, которое должно действительно считаться эром и завершать выполнение. (У меня есть флаг -b в вызове sqlcmd.)

Мое единственное решение, чтобы разбить скрипт на несколько частей?

+0

Я поднял SR на этом и сообщил, что это известная ошибка. – Steve

+0

вы можете попробовать сделать то же самое с msqlcli, загрузив его здесь и посмотрите, получаете ли вы такую ​​же ошибку: https: //blogs.technet.microsoft.com/dataplatforminsider/2017/12/12/try-mssql-cli- a-new-interactive-command-line-tool-for-sql-server/ – TheGameiswar

ответ

2

Это похоже на проблему с драйвером ODBC, который используется sqlcmd под капотом. Можете ли вы подтвердить, что вы видите эту проблему с Azure SQL DB? Также было бы хорошо видеть ваши файлы odbc.ini и odbcinst.ini. Вы можете поделиться ими?

В то же время, я хотел бы рекомендовать несколько очень классных инструментов командной строки Node.js, которые более подходят для Linux и Mac средах:
SQL-CLI
Cheetah

Спасибо,
Meet

1

Я столкнулся с аналогичной проблемой и добавил GO между двумя заявлениями.

+0

Каждое из моих утверждений имеет GO. Необходимо пересмотреть это и посмотреть, все еще присутствует, используя драйвер ODBC V13 SQL Server для Linux. Я использовал v11. – Steve

+1

Снова воспользовалась ошибкой, используя драйвер ODBC V13 SQL Server для Linux. Проблема воспроизводима. Если INSERT/SELECT загружает нулевые строки, последующий SELECT получает «SqlState 24000, Invalid cursor state». – Steve