Azure SQL数据仓库上的sqlcmd-SqlState 24000,INSERT语句后的游标状态无效

Azure SQL数据仓库上的sqlcmd-SqlState 24000,INSERT语句后的游标状态无效,sqlcmd,azure-sqldw,Sqlcmd,Azure Sqldw,我正在编写一个脚本,以便在Linux上使用SQLCMD重新加载一个表,并连接到Azure SQL数据仓库数据库 INSERT语句完成后,下一条语句将失败(但不会结束sqlcmd执行),并显示“警告” GO(脚本中的注释-->但未在日志中回显。) GO(脚本中的注释-->但未在日志中回显。) 脚本将继续运行,每个后续批处理都将获得相同的结果 SqlState 24000,无效的光标状态“警告” 如果我注释掉INSERT语句,脚本将按预期在没有警告的情况下运行。我推测INSERT语句没有关闭游标,随

我正在编写一个脚本,以便在Linux上使用SQLCMD重新加载一个表,并连接到Azure SQL数据仓库数据库

INSERT语句完成后,下一条语句将失败(但不会结束sqlcmd执行),并显示“警告”

GO(脚本中的注释-->但未在日志中回显。)

GO(脚本中的注释-->但未在日志中回显。)

脚本将继续运行,每个后续批处理都将获得相同的结果 SqlState 24000,无效的光标状态“警告”

如果我注释掉INSERT语句,脚本将按预期在没有警告的情况下运行。我推测INSERT语句没有关闭游标,随后的命令会得到警告,该警告实际上应该被视为eror并结束执行。(我在sqlcmd调用中启用了-b标志。)


是我将脚本分解为多个部分的唯一解决方案吗?

这似乎是sqlcmd在后台使用的ODBC驱动程序的问题。能否确认Azure SQL DB是否存在此问题?还可以查看odbc.ini和odbcinst.ini文件。你能分享一下吗

同时,我想推荐两个非常酷的Node.js命令行工具,它们更适合Linux和Mac环境:

谢谢,

Meet

我遇到了类似的问题,在两个语句之间添加
GO
对我有帮助。

我们遇到了同样的问题。通过
SELECT
执行
INSERT
时,会导致
(受影响的0行)
响应和
无效光标状态
错误。在脚本开始时添加
SET NOCOUNT ON
,对我们很有效。正如@meet bhagdev已经指出的,这看起来像是一个驱动因素问题。

我的每一句话都有一个尝试。需要重新审视这一点,并查看是否仍在使用V13 SQL Server ODBC驱动程序进行Linux操作。我使用的是v11。刚刚在使用V13 SQL Server ODBC驱动程序Linux时再次遇到错误。问题是可重现的。如果INSERT/SELECT加载零行,则随后的SELECT将获取“SqlState 24000,无效光标状态”。我对此引发了一个SR,并报告为已知错误。您是否可以尝试通过从此处下载msqlcli来执行相同的操作,并查看是否出现相同的错误:
insert into
  schema.table_temp
(
 ...list of columns
)
select
 ...list of columns
from
   schema.table
;
(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
;
SqlState 24000, Invalid cursor state