我正在尝试解决当我尝试插入/追加到Azure SQL数据库时遇到的错误 .
我得到的错误:
错误:写入数据输入DB(353):在“NoTable”上运行PreSQL时出错:SQL Server的Microsoft OLE DB提供程序:只有在使用列列表时才能指定表“CHART”中标识列的显式值和IDENTITY_INSERT为ON . \ 42000 = 8101
我用来执行插入的工具是Alteryx 10.0,这是一个出色的数据混合和高级分析工具,特别是Write Data In-Database工具 .
自从星期六早上起,我一直试图解决这个问题,没有运气 . 今晚我决定查看OLE连接字符串,看它是否为我提供了任何线索 . 我在连接字符串中遇到了 Use Procedure To Prepare 参数 . 文档指示此参数指示如何创建和释放临时存储过程 . 有两种可能的设置:
-
准备命令时会创建临时存储过程 . 释放会话时,将删除所有临时存储过程 .
-
准备命令时会创建临时存储过程 . 当命令未准备好,指定新命令或释放所有应用程序对命令的引用时,将删除该过程 .
Question 1: 临时存储过程是否依赖于全局临时表?如果是这样,这可能是我的错误的原因,因为Azure SQL数据库不支持全局临时变量?
Question 2: 是 Use Procedure To Prepare
参数可选吗?如果这实际上是我遇到的问题,我希望可以从我的连接字符串中删除此参数并避免创建全局临时表 .
EDIT :尽管错误消息表明我正在尝试插入标识列,但事实并非如此 . 我相信指定"No Table"的错误消息的开头是系统正在寻找global temporary table that is not supported by Azure SQL的提示
在此先感谢您的投入 .
1 回答
答案
该错误消息意味着您正在尝试
INSERT
数据到CHART
表中的IDENTITY
列 . 它还提出了一个解决方案 . 包括列列表并启用标识插入 . 你可以这样做:或者,您可以不尝试插入标识值并将其留给SQL Server .
IDENTITY
列是SQL Server自动计算的值 . 如果我们想手动设置它,我们需要明确这一点,如果我们不想手动设置它,那么我们只是不在VALUES
列表中包含一个值 .另见
IDENTITY (Property)
SET IDENTITY_INSERT