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

标签 sqlcmd azure-synapse

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

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

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

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

(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(注释-->在脚本中,但不在日志中回显。)

SqlState 24000, Invalid cursor state

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

如果我注释掉 INSERT 语句,脚本将按预期运行而不会发出警告。我推测 INSERT 语句没有关闭游标,然后后续命令会收到警告,该警告实际上应该被视为错误并结束执行。 (我在 sqlcmd 调用中启用了 -b 标志。)

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

最佳答案

这似乎是 sqlcmd 在后台使用的 ODBC 驱动程序的问题。您能否确认您是否在 Azure SQL DB 中遇到此问题?如果您能看到 odbc.ini 和 odbcinst.ini 文件,那就太好了。可以分享一下吗?

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

谢谢,
见面

关于Azure SQL 数据仓库上的 sqlcmd - SqlState 24000,INSERT 语句后游标状态无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403223/

相关文章:

sql-server - SQLCMD 命令,如何将输出保存到日志文件中

T-SQL 部署后脚本如何引用变量

azure - 如何在 PySpark 中保存带有当前日期和时间的文件名?

azure - 如何在Azure数据工厂复制事件中指定自动创建表的表分布?

Azure Synapse Web 事件 'GetFolderByServerRelativeUrl' 未经授权的访问

file - SQLCMD 使用 -o 追加文件

c# - 使用用户输入构建 SQL 查询字符串

batch-file - Sqlcmd 错误 "The filename, directory name, or volume label syntax is incorrect"

由于最近的更新,Azure synapse apache Spark池无法安装geopandas

Azure Synapse - 增量数据加载