2

我正在尝试对尝试插入/追加到 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参数。文档表明此参数指示如何创建和释放临时存储过程。有两种可能的设置:

  1. 准备好命令时会创建一个临时存储过程。释放会话时会删除所有临时存储过程。

  2. 准备好命令时会创建一个临时存储过程。当命令未准备好、指定新命令或释​​放所有应用程序对该命令的引用时,该过程将被删除。

问题一:临时存储过程是否依赖全局临时表?如果是这样,这是否是我的错误的原因,因为 Azure SQL 数据库不支持全局临时变量?

问题2:参数是Use Procedure To Prepare可选的吗?如果这实际上是我遇到的问题,希望我可以从连接字符串中删除此参数并避免创建全局临时表。

编辑:尽管错误消息表明我正在尝试插入身份列,但我不是。我相信指定“No Table”的错误消息的开头是系统正在寻找Azure SQL 不支持的全局临时表的提示

提前感谢您的输入。

4

1 回答 1

1

回答

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“CHART”中的标识列指定显式值。

该错误消息意味着您正在尝试将INSERT数据放入表中的IDENTITY列中CHART。它还提出了一个解决方案。包括一个列列表并打开标识插入。你可以这样做:

SET IDENTITY_INSERT CHART ON;

INSERT CHART(column1, column2)
VALUES (value1, value2);

SET IDENTITY_INSERT CHART OFF;

或者,您可以不尝试插入标识值并将其留给 SQL Server。IDENTITY列是 SQL Server 自动计算的值。如果我们想手动设置它,我们需要明确说明,如果我们不想手动设置它,那么我们只是不在VALUES列表中包含一个值。

也可以看看

身份(财产)

SET IDENTITY_INSERT

于 2015-09-14T23:26:37.573 回答