【发布时间】:2015-12-11 01:49:46
【问题描述】:
我正在尝试解决我在尝试插入/追加到 Azure SQL 数据库时遇到的错误。
我得到的错误:
错误:在 DB 中写入数据 (353):在“NoTable”上运行 PreSQL 时出错:Microsoft OLE DB Provider for SQL Server:只有在列列表时才能指定表“CHART”中标识列的显式值已使用且 IDENTITY_INSERT 为 ON。\42000 = 8101
我用来执行插入的工具是 Alteryx 10.0,它是一个出色的数据混合和高级分析工具,特别是 Write Data In-Database 工具。
我从星期六早上开始就一直在尝试解决这个问题,但没有成功。今天晚上我决定查看 OLE 连接字符串,看看它是否为我提供了任何线索。我在连接字符串中遇到了 Use Procedure To Prepare 参数。文档表明此参数指示如何创建和释放临时存储过程。有两种可能的设置:
准备好命令时会创建一个临时存储过程。释放会话时会删除所有临时存储过程。
准备好命令时会创建一个临时存储过程。当命令未准备好、指定新命令或释放所有应用程序对该命令的引用时,该过程将被删除。
问题一:临时存储过程是否依赖全局临时表?如果是这样,这是否是我的错误的原因,因为 Azure SQL 数据库不支持全局临时变量?
问题 2:Use Procedure To Prepare 参数是可选的吗?如果这确实是我遇到的问题,希望我可以从连接字符串中删除此参数并避免创建全局临时表。
编辑:尽管错误消息表明我正在尝试插入标识列,但我没有。我相信指定“No Table”的错误消息的开头是系统正在寻找global temporary table that is not supported by Azure SQL的提示
提前感谢您的意见。
【问题讨论】:
-
那么“Prepare 使用程序”设置为 1 还是 2 是什么?对于较旧的 OLE,它也是一个选项 0,即“准备命令时不会创建临时存储过程”,请参阅 support.microsoft.com/en-us/kb/193135
-
原来设置为1,我相信这是默认值,然后我从连接字符串中删除它,但它仍然产生相同的错误消息。也许当它从字符串中删除时,它默认为默认设置 1。我会尝试 0 看看会产生什么。
-
@Dijkgraaf 我尝试将参数设置为零,但仍然收到错误消息。所以,现在我收到了 1 和 0 的错误消息。我也将尝试 2 以追求所有选项。
标签: sql-server azure oledb azure-sql-database alteryx