首页 文章

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

提问于
浏览
2

我正在尝试解决当我尝试插入/追加到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 回答

  • 1

    答案

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

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

    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

相关问题