sqlcmd on Azure SQL Data Warehouse - SqlState 24000, Invalid cursor state after INSERT statement

三世轮回 提交于 2019-12-12 19:03:22

问题


I am working on a script to reload a table using SQLCMD on Linux connecting to an Azure SQL Data Warehouse database.

After the INSERT statement completes, the next statement fails (but does not end the sqlcmd execution) with the "warning"

insert into
  schema.table_temp
(
 ...list of columns
)
select
 ...list of columns
from
   schema.table
;

GO (COMMENT--> in script, but not echoed in log.)

(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--> in script, but not echoed in log.)

SqlState 24000, Invalid cursor state

The script continues to run with each subsequent batch getting the same SqlState 24000, Invalid cursor state "warning"

If I comment out the INSERT statement, the script runs without warning as expected. I speculate the INSERT statement is not closing a cursor and then subsequent commands get the warning which should really be considered an eror and end the execution. (I have the -b flag on in the sqlcmd invocation.)

Is my only solution to break the script into multiple parts?


回答1:


this seems to be an issue with the ODBC Driver that is used by sqlcmd under the hood. Can you confirm if you see this issue with Azure SQL DB? It would also be good to see your odbc.ini and odbcinst.ini files. Can you share those out?

In the meanwhile, I would like to recommend a couple of very cool Node.js command line tools that are more suited for Linux and Mac environments:
SQL-CLI
Cheetah

Thanks,
Meet




回答2:


I faced similar issue and adding GO between two statements helped me.



来源:https://stackoverflow.com/questions/38403223/sqlcmd-on-azure-sql-data-warehouse-sqlstate-24000-invalid-cursor-state-after

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!