临时存储过程是否使用全局临时表?

时间:2015-09-14 23:16:10

标签: sql-server azure oledb azure-sql-database alteryx

我正在尝试解决当我尝试插入/追加到Azure SQL数据库时遇到的错误。

我得到的错误:

  

错误:在数据库中写入数据(353):在" NoTable"上运行PreSQL时出错:用于SQL Server的Microsoft OLE DB提供程序:表格中的标识列的显式值' CHART&# 39;只能在使用列列表且IDENTITY_INSERT为ON时指定。\ 42000 = 8101

我用来执行插入的工具是Future.traverse,这是一个出色的数据混合和高级分析工具,特别是Write Data In-Database工具。

自从星期六早上起,我一直试图解决这个问题,没有运气。今晚我决定查看OLE连接字符串,看它是否为我提供了任何线索。我在连接字符串中遇到了使用过程准备参数。文档指示此参数指示如何创建和释放临时存储过程。有两种可能的设置:

  1. 准备命令时会创建临时存储过程。发布会话时,将删除所有临时存储过程。

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

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

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

    编辑:尽管错误消息表明我试图插入标识列,但事实并非如此。我相信错误消息的开头指定" No Table"是系统正在寻找Alteryx 10.0

    的提示

    提前感谢您输入。

1 个答案:

答案 0 :(得分:1)

答案

  

表格中的标识列的显式值' CHART'只能在使用列列表且IDENTITY_INSERT为ON时指定。

该错误消息表示您正在尝试将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列表中包含值。

另见

IDENTITY (Property)

SET IDENTITY_INSERT